-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Тема проекта: Календарь с напоминаниями.
Описание:
Проект "Календарь с напоминаниями" — это приложение, которое позволяет пользователям создавать, редактировать и удалять события, а также устанавливать напоминания о предстоящих мероприятиях. Основная цель проекта — предоставить удобный интерфейс для управления событиями и своевременного получения напоминаний.
Основные функциональные возможности (бизнес-функции):
- Регистрация и авторизация пользователей:
- Регистрация нового пользователя с указанием уникального логина и пароля.
- Авторизация пользователя по логину и паролю.
- Хранение паролей в зашифрованном виде для обеспечения безопасности.
- Работа с событиями:
- Создание нового события с возможностью указания даты, времени и описания.
- Редактирование и удаление событий.
- Просмотр событий на текущий день, неделю и месяц.
- Установка напоминаний:
- Возможность добавить напоминание к каждому событию, указав временной интервал для напоминания (например, за 15 минут до события).
- Отправка уведомлений при наступлении времени напоминания.
- Управление профилем пользователя:
- Редактирование данных профиля (имя, адрес электронной почты и т.д.).
- Сброс пароля (возможность восстановления доступа к аккаунту).
- Учет ролей пользователей:
- Разграничение доступа на основе ролей: администратор и обычный пользователь.
- Администраторы имеют доступ к статистике по активности пользователей и могут управлять учетными записями других пользователей.
Технические требования:
- Архитектура:
- Приложение должно быть построено на основе трехуровневой архитектуры MVC с четким разделением на слои: Представление, Бизнес-логика, Данные.
- Технологический стек:
- Язык программирования: Java
- Фреймворк: Spring Framework (включая Spring Boot для упрощения конфигурации и запуска приложения).
- База данных: Реляционная БД (PostgreSQL, MySQL или H2 для разработки).
- ORM: Hibernate для взаимодействия с базой данных.
- Графический интерфейс:
- Интерфейс должен включать следующие элементы: формы ввода для добавления и редактирования событий, таблицу для отображения списка событий, панель навигации по дням, неделям и месяцам.
- Поддержка простого и интуитивно понятного интерфейса для управления событиями.
- Безопасность:
- Реализовать авторизацию и аутентификацию пользователей.
- Пароли должны храниться в зашифрованном виде.
- Разграничение доступа на основе ролей.
- Работа с базой данных:
- Реализовать сущности (события, пользователи, напоминания) и репозитории для работы с ними.
- Сохранение и извлечение данных в базе данных через Hibernate.
- Устойчивость работы:
- Обеспечить стабильное функционирование приложения.
- Обработка возможных ошибок и их логирование.
Опциональные требования:
- Паттерны проектирования:
- Реализовать код в соответствии с шаблонами проектирования
- Тестирование:
- Написать автоматические тесты для проверки основной функциональности приложения
- Логирование:
- Подключить систему логирования (например, Log4j или SLF4J) для отслеживания ошибок и состояния приложения.
- RESTful API:
- Разработать REST API для взаимодействия с клиентскими приложениями
- Асинхронная и многопоточная обработка:
- Реализовать отправку уведомлений и напоминаний в асинхронном режиме.
- Использовать многопоточность для оптимизации долгих операций (например, обработки уведомлений, формирование отчета).
- Мониторинг:
- Подключить систему мониторинга (например, Java Melody) для отслеживания состояния приложения.
- Контейнеризация:
- Упаковать приложение в Docker-образ для облегчения развертывания.
- Документация:
- Написать документацию по проекту, описывая основные компоненты, настройки и инструкции по развертыванию приложения.
Сущности:
- Пользователь (User)
Атрибуты:
- user_id (PK) — уникальный идентификатор пользователя
- name — имя пользователя
- email — электронная почта для получения уведомлений
- timezone — часовой пояс пользователя для правильного времени уведомлений
Связи: Один пользователь может иметь несколько событий (связь один-ко-многим с сущностью Event).
- Событие (Event)
Атрибуты:
- event_id (PK) — уникальный идентификатор события
- title — название события
- description — описание события
- event_time — дата и время события
Связи: Каждое событие принадлежит одному пользователю (связь многие-к-одному с сущностью User) и может иметь несколько напоминаний (связь один-ко-многим с сущностью Reminder).
- Напоминание (Reminder)
Атрибуты:
- reminder_id (PK) — уникальный идентификатор напоминания
- reminder_time — время отправки напоминания
- method — способ напоминания (например, email, push-уведомление)
Связи: Напоминание связано с конкретным событием (связь многие-к-одному с сущностью Event).
- Тип события (EventType)
Атрибуты:
- event_type_id (PK) — уникальный идентификатор типа события
- type_name — название типа (например, "Встреча", "Задача", "Годовщина")
- color — цвет для обозначения типа на календаре
Связи: Один тип события может относиться к нескольким событиям (связь один-ко-многим с сущностью Event).
- Повторение события (Recurrence)
Атрибуты:
- recurrence_id (PK) — уникальный идентификатор шаблона повторения
- frequency — частота повторения (ежедневно, еженедельно, ежемесячно)
- end_date — дата окончания повторения
Связи: Одно повторение может быть связано с несколькими событиями (связь один-ко-многим с сущностью Event).
ER-диаграмма
Основные связи:
User (1) <-> (M) Event
Event (1) <-> (M) Reminder
EventType (1) <-> (M) Event
Recurrence (1) <-> (M) Event