API менеджера задач для персонального пользования.
Создание групп и иерархий задач, прикрепление файлов к задачам, комментирование задач.
2 модуля:
-
UserModule - отвечает за пользователей
-
PersonalTodoModule - отвечает за задачи
Независимы друг от друга, объединены в WebRoot.
Каждый модуль построен на основе классической трехслойной архитектуре: есть основной слой Domain, у него есть порты, которые "заполняет" слой Infrastructure, а использует его слой API.
Result pattern + Functional style (railway-oriented programming). Но лучше без второго - понятнее. А также обогатить Error - сделать более различными.
CQS - своя реализация, без использования посредника (MediatR или аналоги).
У каждого модуля своя схема в базе данных. База данных - SQLite. Для более хорошей работы приложения нужно заменить.
Модули "общаются" асинхронно, через очередь сообщений. Используется собственная in-memory реализация через Channels. Для более хорошей работы приложения нужно заменить.
В PersonalTodoModule для хранения файлов используется локальное хранилище. Наверное, лучше заменить на объектное хранилище, но возможно придется несколько поменять логику.
...реализовать согласованность при создании задачи: нужно учесть лимиты пользователя, сохранить файлы и создать записи об их сохранении, создать задачу с прикреплением к ней созданных записей о файлах, а также не забыть про файлы, которые сохранены, но записей о них нет.
...написать хоть какие-то тесты...
В PersonalTodoModule:
- Просмотр недавно удаленных задач и файлов.
- Возможность восстановления недавно удаленных задач, файлов, комментариев.
- Возможность "поделиться" задачей.
- Уведомления о задаче с подходящей к концу дате выполнения.
В UserModule:
- Смена пароля.
- Привязка аккаунтов для уведомлений.
- Аватарки.
Добавить GroupTodoModule - модуль для работы с задачами в группе: кастомные роли в группе, функционал из PersonalTodoModule, но с условием роли пользователя в группе.
Логирование, сбор метрик и трейсов, контейнеризация, внешний сервис вместо UserModule.