=== backend/overview.md === 📦 backend/Overview 📂 Назначение backend Backend реализует REST API для системы управления задачами (TaskManager). Система покрывает:
управление пользователями и ролями (RBAC)
управление задачами (CRUD + статусы + история)
комментарии
события (календарь)
отчёты и аналитика
аудит действий пользователей
🧱 Общая архитектура Архитектурный стиль Проект реализует упрощённую Clean Architecture: Controllers (Presentation) ↓Services (Application / Business Logic) ↓Data (EF Core / Infrastructure) ↓Database (PostgreSQL) Дополнительно: Models (Domain)DTOs (Contracts)Extensions (Mapping Layer)
🔄 End-to-End Flow Пример: создание задачи Client (frontend) ↓ HTTP POST /api/tasksController (TasksController) ↓TaskService.CreateAsync() ↓AppDbContext (EF Core) ↓PostgreSQLTaskService ↓AuditService.LogAsync()TaskService ↓MappingExtensions.ToDto()Controller ↓HTTP 201 Created (TaskDto)
⚙️ Конфигурация приложения 📄 Program.cs Главная точка входа приложения.
используется PostgreSQL
ORM: Entity Framework Core
IAuditService
IAuthService
IUserService
ITaskService
IReportService
IEventService
👉 lifetime: Scoped (на запрос)
Issuer
Audience
SigningKey
👉 используется Symmetric Key (HMAC)
[Authorize]
[Authorize(Roles = "...")]
поддержка JWT
UI доступен по /swagger
⚠️ Критическое поведение при старте ❗ Полная пересоздача БД await db.Database.EnsureDeletedAsync();await db.Database.EnsureCreatedAsync();
Последствия:
❌ ВСЕ данные удаляются при каждом запуске
❌ не используется миграции
❌ невозможно использовать в production
Затем: await DbSeeder.SeedAsync(db); 👉 база заполняется начальными данными
📌 Вывод: Это:
подходит для разработки / демо
НЕ подходит для production
🐳 Docker Dockerfile Многоступенчатая сборка:
build stage
restore
build
publish
runtime stage
ASP.NET runtime
запуск приложения
ENTRYPOINT ["dotnet", "TaskManager.API.dll"]
Особенности:
порт: 8080
production-ready image
минимальный размер (без SDK)
⚙️ Конфигурация (appsettings.json)
PostgreSQL
user: postgres
JWT "Key": "TaskManager_SuperSecret_Key..." 👉 используется для подписи токенов
Logging "Microsoft.EntityFrameworkCore.Database.Command": "Warning" 👉 SQL-запросы не логируются подробно
📦 Зависимости (.csproj)
Основные библиотеки: EF Core
Microsoft.EntityFrameworkCore
Npgsql.EntityFrameworkCore.PostgreSQL
Auth
Microsoft.AspNetCore.Authentication.JwtBearer
System.IdentityModel.Tokens.Jwt
Security
BCrypt.Net-Next
👉 используется для хеширования паролей
Swagger
Swashbuckle.AspNetCore
🔗 Связи между слоями Controllers ↓Services ↓DbContext ↓DatabaseServices ↓MappingExtensions ↓DTOs
💡 Ключевые архитектурные особенности
Без Repository слоя Service → DbContext 👉 упрощённая архитектура
Mapping через Extension методы Entity → ToDto() 👉 альтернатива AutoMapper
Явный AuditService Service → AuditService 👉 аудит встроен в бизнес-логику
Role-based security
JWT + Roles
проверка:
на уровне контроллеров
внутри сервисов
чёткое разделение:
Request
Response
Brief
Detail
⚠️ Архитектурные проблемы
❗ Пересоздание БД при старте EnsureDeleted + EnsureCreated 👉 критично для production
Нет миграций 👉 нельзя управлять схемой БД
Нет Repository слоя 👉 сильная связность сервисов с EF
Бизнес-логика частично в Mapping IsOverdueStatusName comparisons
Строковые статусы "Выполнена" 👉 риск ошибок
Нет централизованного error handling 👉 отсутствует middleware
Нет кэширования 👉 отчёты пересчитываются каждый раз
📌 Итог Backend представляет собой:
хорошо структурированную систему
с понятной логикой
с упрощённой архитектурой
Подходит для:
MVP
корпоративного внутреннего инструмента
Требует доработки для:
production
масштабирования
=== PROJECT_STRUCTURE.md === 📦 PROJECT STRUCTURE 📁 Полное дерево проекта (backend) backend/│├── Controllers/│ ├── AuthController.cs│ ├── EventsController.cs│ ├── ReportsController.cs│ ├── TasksController.cs│ └── UsersController.cs│├── Models/│ ├── User.cs│ ├── Role.cs│ ├── Department.cs│ ├── TaskItem.cs│ ├── Status.cs│ ├── Comment.cs│ ├── TaskHistory.cs│ ├── Event.cs│ ├── Report.cs│ └── AuditLog.cs│├── DTOs/│ └── (все DTO-контракты)│├── Services/│ ├── AuthService.cs│ ├── UserService.cs│ ├── TaskService.cs│ ├── EventService.cs│ ├── ReportService.cs│ └── AuditService.cs│├── Data/│ ├── AppDbContext.cs│ └── DbSeeder.cs│├── Extensions/│ └── MappingExtensions.cs│├── Program.cs├── appsettings.json├── Dockerfile└── TaskManager.API.csproj
📂 Уровни архитектуры
сущности системы
связи между ними
входные и выходные модели API
бизнес-логику
use-case'ы
преобразование Entity → DTO
DbContext
доступ к БД
seed
API endpoints
DI
конфигурацию
middleware
🔄 Полный поток данных [ Client (Frontend) ] ↓ HTTP[ Controllers ] ↓[ Services ] ↓[ DbContext (EF Core) ] ↓[ PostgreSQL ] ↑[ Services ] ↓[ MappingExtensions ] ↓[ DTO ] ↓[ Controllers ] ↓ JSON[ Client ]
📌 Как всё связано
принимают HTTP
вызывают Services
реализуют бизнес-логику
работают с DbContext
вызывают AuditService
используют MappingExtensions
управляет БД
хранит DbSet
преобразуют Entities → DTO
формируют API ответы
📌 Ключевые особенности проекта
EF Core без Repository
ручной mapping через extension
JWT авторизация
RBAC (roles)
аудит действий
аналитика (reports)