Лист желаний
Реализуйте сайт "Лист желаний", в котором пользователь может составлять список желаемых подарков на день рождения.
Продумайте структуру базы данных для хранения пользователей, подарков, друзей и уведомлений. Реализуйте регистрацию и авторизацию пользователей. Настройте серверную часть для работы с API. Все операции по чтению данных (вывод списка желаний, друзей, подарков) должны выполняться через SSR для индексации поисковиками. Все операции по записи (добавление, редактирование, удаление подарков, добавление друзей, отметка подарков) - через AJAX-запросы без перезагрузки страницы.
Основные возможности проекта
- Регистрация пользователей с указанием ФИО и даты рождения.
- Создание и управление списком желаний (добавление, редактирование, удаление подарков).
- Добавление друзей по уникальной ссылке-приглашению.
- Просмотр списка друзей с их днями рождения и списками желаний.
- Отметка подарков в списке желаний друга (с ограничением за 2 дня до ДР).
- Автоматические напоминания о днях рождения друзей.
Регистрация и авторизация
На сайте должна быть реализована система регистрации и авторизации пользователей:
- При регистрации пользователь должен указать ФИО, email, пароль и дату рождения.
- Авторизация по email и паролю.
- Восстановление пароля через email.
- Валидация всех полей на стороне сервера.
- Профиль пользователя с возможностью редактирования данных.
Лист желаний (SSR + AJAX)
Лист желаний представляет собой список подарков, которыми пользователь может управлять. Страница со списком желаний генерируется на сервере (SSR) для индексации поисковиками. Операции по записи выполняются через AJAX.
- Каждый подарок должен содержать название и при необходимости комментарий.
- Возможность добавлять подарки (название, описание, ссылка на товар, категория, приоритет, ориентировочная цена) - через AJAX.
- Возможность редактировать существующие подарки - через AJAX.
- Возможность удалять подарки - через AJAX.
- Сортировка подарков по приоритету, категории или дате добавления.
- Категории подарков (книги, техника, одежда, хобби, путешествия, спорт, косметика, другое).
Добавление друзей (AJAX)
На сайте должна быть реализована система добавления друзей по ссылке-приглашению:
- Пользователь нажимает на кнопку "Пригласить друга".
- Система генерирует уникальную ссылку-приглашение.
- Ссылку можно скопировать и отправить другу в любом мессенджере.
- При переходе по ссылке пользователь добавляется в друзья автоматически.
- Если пользователь уже авторизован - добавление происходит сразу.
- Если пользователь не авторизован - его перенаправляют на страницу регистрации, после которой добавление происходит автоматически.
Друзья (SSR)
В профиле пользователя отображается список его друзей. Страница генерируется на сервере (SSR):
- Имя и фамилия друга.
- Дата рождения друга.
- Количество дней до дня рождения.
- Ссылка на лист желаний друга.
- Количество подарков в списке желаний друга.
- Кнопка для удаления из друзей.
Подарки (AJAX)
Друзья пользователя могут просматривать его лист желаний и отмечать подарки. Все операции выполняются через AJAX:
- Друзья видят все подарки в листе желаний пользователя.
- Каждый друг может отметить один из подарков (зарезервировать его для себя).
- После отметки подарок становится недоступным для других друзей.
- Сам пользователь не видит отметок в своем листе желаний.
- Друзья видят, кто отметил подарок (кроме самого владельца листа).
- Отметку можно отменить, но не позднее чем за 2 дня до дня рождения пользователя.
- После отмены подарок снова становится свободным.
- Приближается дата ДР - оставшиеся свободные подарки подсвечиваются.
Напоминания
Сайт должен автоматически напоминать пользователю о днях рождения друзей:
- Напоминание выдается за 14, 7, 1 день и в день рождения друга.
- Напоминания выводятся на главной странице после авторизации.
- Напоминания можно отправлять на email.
- В напоминании указывается имя друга и количество оставшихся дней.
Взаимодействие с сервером
Гибридный подход:
- SSR - страницы со списком желаний, друзей, профилей генерируются на сервере для индексации поисковиками.
- AJAX - все операции по записи (добавление, редактирование, удаление подарков, добавление друзей, отметка подарков) выполняются через AJAX-запросы без перезагрузки страницы.
Дополнительные возможности
- Возможность загружать фото для каждого подарка.
- Возможность указывать магазин или сайт, где можно приобрести подарок.
- Поиск друзей по имени и фамилии.
- Публичный профиль со списком желаний (по ссылке).
- Статистика: сколько подарков уже занято, сколько свободно.