Введение
В современном мире человек использует множество разрозненных сервисов для поддержания социальных связей: телефонную книгу для контактов, календарь для событий, отдельные платформы для списков желаний. Это приводит к фрагментации данных, потере важных дат и снижению эффективности взаимодействия. Анализ существующих решений показывает, что ни одно из них не предоставляет полного функционала для комплексного управления социальными связями. Целью работы является создание единой веб-платформы, интегрирующей функции управления контактами, событиями и виш-листами с возможностью бронирования подарков. Ключевым аспектом разработки является создание эффективной схемы базы данных для обработки сложных связей между пользователями.
1. Архитектура и технологический стек
Приложение построено по клиент-серверной архитектуре. Клиентская часть реализована как SPA на React.js 19.2.0 с использованием библиотеки компонентов Material-UI 7.3.4. Управление состоянием осуществляется через Context API. Для взаимодействия с сервером используется HTTP-клиент Axios.
Серверная часть разработана на платформе Node.js 18+ с использованием фреймворка Express.js 4.18.2. Аутентификация реализована на основе JWT-токенов, для хеширования паролей используется bcrypt. В качестве системы управления базами данных выбрана PostgreSQL 14+, обеспечивающая поддержку ACID-транзакций и целостность данных через внешние ключи. Взаимодействие с базой данных организовано через ORM Sequelize 6.35.2, что обеспечивает защиту от SQL-инъекций.
2. Модель данных и проектирование базы данных
В основе приложения лежит реляционная модель данных. Проектирование выполнялось с учетом требований целостности и необходимости поддержки ACID-транзакций. База данных включает семь взаимосвязанных таблиц:
- users – пользователи приложения (id, email, password_hash, name);
- contacts – контакты пользователей (id, user_id, name, phone, email, birthday, category);
- events – события, привязанные к контактам (id, contact_id, user_id, title, event_date, type);
- gifts – подарки, которые пользователь планирует подарить контактам (id, contact_id, user_id, title, price, purchased);
- wishlist – публичный список желаемых подарков пользователя (id, user_id, gift_title, price, reserved_by, status);
- friends – связи между пользователями (id, user_id, friend_id, status);
- user_settings – настройки приватности (id, user_id, wishlist_privacy).
Ключевой особенностью является таблица wishlist, которая содержит поля reserved_by и status. Это позволяет реализовать функционал бронирования подарков, предотвращая состояние гонки при одновременных запросах. Все таблицы связаны внешними ключами с каскадным удалением, что гарантирует согласованность данных.
Для обеспечения производительности при росте количества пользователей были созданы индексы по часто используемым в запросах полям: составной индекс (user_id, status) в таблице wishlist для быстрого поиска доступных подарков конкретного пользователя; индекс по полю event_date в таблице events для эффективной выборки событий, запланированных на ближайшее время; индекс по email в таблице users для ускорения аутентификации.
3. Реализованный функционал
Приложение предоставляет пользователям следующий функционал:
Управление контактами включает добавление, редактирование, удаление и фильтрацию контактов по категориям. Перед удалением контакта появляется модальное окно с подтверждением действия.
Управление событиями позволяет создавать события, привязанные к контактам, с автоматическим расчётом статуса. Дата отображается в человекочитаемом формате.
Социальные функции реализуют систему друзей с возможностью отправки и принятия запросов, поиск пользователей по имени или email.
Виш-лист и бронирование позволяют пользователям добавлять подарки в свой публичный виш-лист. Любой авторизованный пользователь может просматривать чужие виш-листы. Операция бронирования подарка выполняется в рамках транзакции: сначала производится SELECT для проверки статуса, а затем UPDATE. Такой подход гарантирует, что два пользователя не смогут одновременно забронировать один и тот же подарок.
Email-уведомления реализованы с использованием Nodemailer и планировщика задач node-cron, который каждый час проверяет события, запланированные на следующий день.
4. Тестирование
Для проверки корректности работы серверной части были разработаны интеграционные тесты с использованием Jest и Supertest. Тестирование проводилось на отдельной тестовой базе данных. Всего создано 46 тестов, покрывающих модули аутентификации, управления контактами, событиями, виш-листами и системой друзей. Процент успешного прохождения тестов составляет 100 процентов.
В процессе тестирования были выявлены и исправлены девять ошибок, включая проблемы с отображением дат в событиях, некорректную работу редактирования контактов, неверную видимость чужих виш-листов и ошибки в логике бронирования.
Заключение
В результате работы было разработано полнофункциональное веб-приложение для управления социальными контактами. Оно объединяет ключевые функции по работе с контактами, событиями и подарками в единой платформе, решая проблему фрагментации цифровых сервисов. Спроектированная схема базы данных обеспечивает надежное хранение и целостность информации для всех ключевых сценариев работы приложения. Применение транзакций при бронировании подарков гарантирует корректность данных даже при параллельном доступе, а использование индексов позволяет поддерживать производительность при росте объема данных. Приложение прошло комплексное тестирование и готово к практическому использованию.
Список литературы
- Иванов П.С. Анализ современных подходов к разработке веб-приложений для управления социальными контактами // Вестник информационных технологий. 2024. № 3. С. 45-52
- Comparison of Contact Management Solutions: Features and Performance Metrics // Capterra. URL: https://www.capterra.com/contact-management-software/ (дата обращения: 10.08.2025)
- Дьяконов А.В. Анализ систем-аналогов для управления социальными контактами // Отчёт по НИР 1.1. Самара: Самарский университет, 2024
- PostgreSQL. Официальная документация. URL: https://www.postgresql.org/docs/ (дата обращения: 15.02.2026)
- Гарсия-Молина Г., Ульман Дж., Уидом Дж. Системы баз данных. Полный курс. Москва: Вильямс, 2018. 1088 с.


