Skip to content

Техническое задание (ТЗ) #2

@KirillDmit

Description

@KirillDmit

Тема проекта: Календарь с напоминаниями.

Описание:

Проект "Календарь с напоминаниями" — это приложение, которое позволяет пользователям создавать, редактировать и удалять события, а также устанавливать напоминания о предстоящих мероприятиях. Основная цель проекта — предоставить удобный интерфейс для управления событиями и своевременного получения напоминаний.

Основные функциональные возможности (бизнес-функции):

  1. Регистрация и авторизация пользователей:
  • Регистрация нового пользователя с указанием уникального логина и пароля.
  • Авторизация пользователя по логину и паролю.
  • Хранение паролей в зашифрованном виде для обеспечения безопасности.
  1. Работа с событиями:
  • Создание нового события с возможностью указания даты, времени и описания.
  • Редактирование и удаление событий.
  • Просмотр событий на текущий день, неделю и месяц.
  1. Установка напоминаний:
  • Возможность добавить напоминание к каждому событию, указав временной интервал для напоминания (например, за 15 минут до события).
  • Отправка уведомлений при наступлении времени напоминания.
  1. Управление профилем пользователя:
  • Редактирование данных профиля (имя, адрес электронной почты и т.д.).
  • Сброс пароля (возможность восстановления доступа к аккаунту).
  1. Учет ролей пользователей:
  • Разграничение доступа на основе ролей: администратор и обычный пользователь.
  • Администраторы имеют доступ к статистике по активности пользователей и могут управлять учетными записями других пользователей.

Технические требования:

  1. Архитектура:
  • Приложение должно быть построено на основе трехуровневой архитектуры MVC с четким разделением на слои: Представление, Бизнес-логика, Данные.
  1. Технологический стек:
  • Язык программирования: Java
  • Фреймворк: Spring Framework (включая Spring Boot для упрощения конфигурации и запуска приложения).
  • База данных: Реляционная БД (PostgreSQL, MySQL или H2 для разработки).
  • ORM: Hibernate для взаимодействия с базой данных.
  1. Графический интерфейс:
  • Интерфейс должен включать следующие элементы: формы ввода для добавления и редактирования событий, таблицу для отображения списка событий, панель навигации по дням, неделям и месяцам.
  • Поддержка простого и интуитивно понятного интерфейса для управления событиями.
  1. Безопасность:
  • Реализовать авторизацию и аутентификацию пользователей.
  • Пароли должны храниться в зашифрованном виде.
  • Разграничение доступа на основе ролей.
  1. Работа с базой данных:
  • Реализовать сущности (события, пользователи, напоминания) и репозитории для работы с ними.
  • Сохранение и извлечение данных в базе данных через Hibernate.
  1. Устойчивость работы:
  • Обеспечить стабильное функционирование приложения.
  • Обработка возможных ошибок и их логирование.

Опциональные требования:

  1. Паттерны проектирования:
  • Реализовать код в соответствии с шаблонами проектирования
  1. Тестирование:
  • Написать автоматические тесты для проверки основной функциональности приложения
  1. Логирование:
  • Подключить систему логирования (например, Log4j или SLF4J) для отслеживания ошибок и состояния приложения.
  1. RESTful API:
  • Разработать REST API для взаимодействия с клиентскими приложениями
  1. Асинхронная и многопоточная обработка:
  • Реализовать отправку уведомлений и напоминаний в асинхронном режиме.
  • Использовать многопоточность для оптимизации долгих операций (например, обработки уведомлений, формирование отчета).
  1. Мониторинг:
  • Подключить систему мониторинга (например, Java Melody) для отслеживания состояния приложения.
  1. Контейнеризация:
  • Упаковать приложение в Docker-образ для облегчения развертывания.
  1. Документация:
  • Написать документацию по проекту, описывая основные компоненты, настройки и инструкции по развертыванию приложения.

Сущности:

  1. Пользователь (User)

Атрибуты:

  • user_id (PK) — уникальный идентификатор пользователя
  • name — имя пользователя
  • email — электронная почта для получения уведомлений
  • timezone — часовой пояс пользователя для правильного времени уведомлений

Связи: Один пользователь может иметь несколько событий (связь один-ко-многим с сущностью Event).

  1. Событие (Event)

Атрибуты:

  • event_id (PK) — уникальный идентификатор события
  • title — название события
  • description — описание события
  • event_time — дата и время события

Связи: Каждое событие принадлежит одному пользователю (связь многие-к-одному с сущностью User) и может иметь несколько напоминаний (связь один-ко-многим с сущностью Reminder).

  1. Напоминание (Reminder)

Атрибуты:

  • reminder_id (PK) — уникальный идентификатор напоминания
  • reminder_time — время отправки напоминания
  • method — способ напоминания (например, email, push-уведомление)

Связи: Напоминание связано с конкретным событием (связь многие-к-одному с сущностью Event).

  1. Тип события (EventType)

Атрибуты:

  • event_type_id (PK) — уникальный идентификатор типа события
  • type_name — название типа (например, "Встреча", "Задача", "Годовщина")
  • color — цвет для обозначения типа на календаре

Связи: Один тип события может относиться к нескольким событиям (связь один-ко-многим с сущностью Event).

  1. Повторение события (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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions