Skip to content

Latest commit

 

History

History
46 lines (36 loc) · 3.69 KB

File metadata and controls

46 lines (36 loc) · 3.69 KB

Описание

BLL

В проекте реализовано два сервиса со следующим функционалом

  • TaskService
    • CreateTask - создать новую задачу. Также создаётся запись в таблице task_logs о этой задаче.
    • GetTask - получить задачу по id. Если задача уже есть в кэше, то она и возвращается, иначе задача берётся из БД, сохраняется в кэш и возвращаетя пользователю.
    • AssignTask - закрепить задачу за пользователем
    • SetParentTask - назначить задаче родительскую задачу
  • TaskCommentService
    • CreateComment - создать комментарий к конкретной задаче
    • GetComments - получить все комментарии по задаче. Можно задать параметр получения всех комментариев к задаче( удалённых комментариев в том числе) или только действительных комментариев. По требованию в тз пять самых новых сообщений записываются в кэш.
    • UpdateTaskComment - изменить сообщение в конкретном комментарии
    • SetDeleted - отметить комментарий удалённым (объект сохраняется в системе, а также заполняется атрибут deleted_at временем удаления )

RateLimiter

Одним из требований к заданию также было реализовать свою "на коленке" реализацию rate limiter для ограничении числа запросов в минуту от конкретного пользователя, с допущением, что ip пользователя можно получить из запроса Rate limiter работает по алгоритму "текущего ведра" (Token Bucket Algorithm) и для хранения информации о запросах используется Redis.

RateLimiterInterceptor перехватывает запрос и передаёт информацию о пользователе в RateLimiterService, где проверяется не превышен ли лимит.

DAL

Репозитории в проекте делятся на два типа: PostgreSQL репозитории и Redis репозитории

  • PostgreSQL
    • TaskRepository - основновной репозиторий отвечающий за создание задач, получение задач и т.д.
    • TaskCommentRepository - репозиторий отвечающий за комментарии к задачам
    • TaskLogRepository - репозиторий для логирования изменений в задачах
    • UserRepository - репозиторий для работы с пользователями
  • Redis
    • RateLimiterRepository - репозиторий для доступа к информации о запросах от пользователя в минуту
    • TakenTaskRepository - репозиторий для доступа к кешу для хранения, получения данных о взятых тасках
    • UserScheduleRepository - репозиторий для доступа к пользовательскому расписанию

Описание базы данных