overview.md 8.9 KB

=== 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 Главная точка входа приложения.

  1. Подключение базы данных builder.Services.AddDbContext(opt => opt.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
  2. используется PostgreSQL

    ORM: Entity Framework Core

    1. Dependency Injection builder.Services.AddScoped(); Регистрируются сервисы:
    2. IAuditService

      IAuthService

      IUserService

      ITaskService

      IReportService

      IEventService

      👉 lifetime: Scoped (на запрос)

      1. JWT Authentication builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) Параметры:

      Issuer

      Audience

      SigningKey

      👉 используется Symmetric Key (HMAC)

      1. Authorization builder.Services.AddAuthorization(); Используется:

      [Authorize]

      [Authorize(Roles = "...")]

      1. Swagger (OpenAPI) builder.Services.AddSwaggerGen(...) Особенности:

      поддержка JWT

      UI доступен по /swagger

      1. CORS .WithOrigins( "http://localhost:3000", "http://localhost:5173", "http://frontend") 👉 разрешён доступ frontend-приложениям

      ⚠️ Критическое поведение при старте ❗ Полная пересоздача БД 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)

      1. Connection String "Host=localhost;Port=5432;Database=taskmanager"

      PostgreSQL

      user: postgres

      1. JWT "Key": "TaskManager_SuperSecret_Key..." 👉 используется для подписи токенов

      2. 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

      💡 Ключевые архитектурные особенности

      1. Без Repository слоя Service → DbContext 👉 упрощённая архитектура

      2. Mapping через Extension методы Entity → ToDto() 👉 альтернатива AutoMapper

      3. Явный AuditService Service → AuditService 👉 аудит встроен в бизнес-логику

      4. Role-based security

      JWT + Roles

      проверка:

      на уровне контроллеров

      внутри сервисов

      1. DTO-first API

      чёткое разделение:

      Request

      Response

      Brief

      Detail

      ⚠️ Архитектурные проблемы

      1. ❗ Пересоздание БД при старте EnsureDeleted + EnsureCreated 👉 критично для production

      2. Нет миграций 👉 нельзя управлять схемой БД

      3. Нет Repository слоя 👉 сильная связность сервисов с EF

      4. Бизнес-логика частично в Mapping IsOverdueStatusName comparisons

      5. Строковые статусы "Выполнена" 👉 риск ошибок

      6. Нет централизованного error handling 👉 отсутствует middleware

      7. Нет кэширования 👉 отчёты пересчитываются каждый раз

      📌 Итог 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

      📂 Уровни архитектуры

      1. Domain Layer (ядро) Models/ Содержит:

      сущности системы

      связи между ними

      1. Contract Layer DTOs/ Содержит:

      входные и выходные модели API

      1. Application Layer Services/ Содержит:

      бизнес-логику

      use-case'ы

      1. Mapping Layer Extensions/ Содержит:

      преобразование Entity → DTO

      1. Infrastructure Layer Data/ Содержит:

      DbContext

      доступ к БД

      seed

      1. Presentation Layer Controllers/ Содержит:

      API endpoints

      1. Composition Root Program.cs Содержит:

      DI

      конфигурацию

      middleware

      🔄 Полный поток данных [ Client (Frontend) ] ↓ HTTP[ Controllers ] ↓[ Services ] ↓[ DbContext (EF Core) ] ↓[ PostgreSQL ] ↑[ Services ] ↓[ MappingExtensions ] ↓[ DTO ] ↓[ Controllers ] ↓ JSON[ Client ]

      📌 Как всё связано

      1. Controllers

      принимают HTTP

      вызывают Services

      1. Services

      реализуют бизнес-логику

      работают с DbContext

      вызывают AuditService

      используют MappingExtensions

      1. DbContext

      управляет БД

      хранит DbSet

      1. MappingExtensions

      преобразуют Entities → DTO

      1. DTOs

      формируют API ответы

      📌 Ключевые особенности проекта

      EF Core без Repository

      ручной mapping через extension

      JWT авторизация

      RBAC (roles)

      аудит действий

      аналитика (reports)