Вимоги
- Інтегрувати MediatR
- Налаштувати DI та сканування обробників у Program.cs
- Переписати контролери: замість сервісів викликати
mediator.Send(command/query) - Кожна операція — окремий клас:
IRequest/IRequest<T>+ відповіднийIRequestHandler
Основні приклади CQRS-об’єктів
- Запити:
GetGenresQuery, GetSongsByGenreQuery, GetPendingRegistrationsQuery, GetSongDownloadLinkQuery - Команди:
AddSongCommand, EditSongCommand, DeleteSongCommand
RegisterUserRequestCommand, ActivateUserCommand, DeleteUserCommand
AddGenreCommand, EditGenreCommand, DeleteGenreCommand
AddUserCommand, EditUserCommand
Обмеження прав
- Перевірка ролей (Гість / Користувач / Адміністратор) в обробниках команд
- Звичайні користувачі додають пісні лише в існуючі жанри, не редагують/не видаляють чужі
Технічні моменти
- Шари: Presentation → Application (CQRS) → Domain → Infrastructure (EF Core)