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