TaskFlow.API - это REST API для системы управления проектами, задачами и командной работой. Проект имитирует backend реального корпоративного сервиса: пользователи могут создавать проекты, добавлять участников, ставить задачи, назначать исполнителей, отслеживать статусы, задавать дедлайны и обсуждать задачи в комментариях.
Главная цель проекта - показать навыки Junior+/Middle ASP.NET Core Developer: чистую архитектуру, работу с базой данных, авторизацию, роли, валидацию, логирование, Docker и аккуратную организацию кода.
TaskFlow можно представить как упрощённый аналог backend-части Jira, Trello или YouTrack.
В системе есть пользователи с ролями:
Admin- имеет расширенный доступ к данным.Manager- может создавать и управлять проектами.User- участвует в проектах, работает с задачами и комментариями.
Типичный сценарий работы:
- Пользователь регистрируется или входит в систему.
- Менеджер создаёт проект и добавляет участников.
- В проекте создаются задачи.
- Задачам назначаются исполнители и дедлайны.
- Исполнители меняют статус задач:
ToDo,InProgress,Done,Cancelled. - Участники обсуждают задачи через комментарии.
- Каждый пользователь может посмотреть свой профиль, свои проекты и свои задачи.
Проект построен так, чтобы выглядеть как backend, который можно развивать дальше: добавить уведомления, файлы, доски Kanban, приглашения в проекты, аналитику или интеграцию с фронтендом.
.NET 10ASP.NET Core Web APIEntity Framework CorePostgreSQLJWT AuthenticationRefresh TokenRole-based AuthorizationFluentValidationAutoMapperSerilogSwagger / OpenAPIDockerDocker ComposeClean ArchitectureRepository PatternUnit of WorkDependency InjectionGlobal Exception MiddlewareAsync/Await
Проект разделён на четыре слоя по принципам Clean Architecture:
TaskFlow.Domain- доменные сущности и enum'ы.TaskFlow.Application- DTO, интерфейсы сервисов, интерфейсы репозиториев, валидаторы, AutoMapper-профили.TaskFlow.Infrastructure- EF Core, PostgreSQL, реализации сервисов, репозитории, Unit of Work, JWT, хеширование паролей.TaskFlow.API- контроллеры, middleware, Swagger, DI-настройки, запуск приложения.
Зависимости направлены внутрь: внешний слой API не содержит бизнес-логики, а доменный слой не зависит от инфраструктуры, базы данных или ASP.NET Core.
flowchart TB
API["TaskFlow.API<br/>Controllers, Middleware, Swagger, Auth"]
Infrastructure["TaskFlow.Infrastructure<br/>EF Core, Repositories, Services, JWT"]
Application["TaskFlow.Application<br/>DTOs, Interfaces, Validators, Mapping"]
Domain["TaskFlow.Domain<br/>Entities, Enums, Business Model"]
API --> Application
API --> Infrastructure
Infrastructure --> Application
Infrastructure --> Domain
Application --> Domain
TaskFlow.API/
├── TaskFlow.API/ # Web API, контроллеры, middleware, extensions
├── TaskFlow.Application/ # DTO, валидаторы, интерфейсы, маппинг
├── TaskFlow.Domain/ # Сущности и enum'ы
├── TaskFlow.Infrastructure/ # EF Core, PostgreSQL, сервисы, репозитории, JWT
├── Dockerfile
├── docker-compose.yml
└── README.md
- Регистрация пользователя.
- Логин по email и паролю.
- Генерация JWT access token.
- Обновление access token через refresh token.
- Logout с отзывом refresh token.
- Создание, изменение, удаление и получение проектов.
- Добавление участников в проект.
- Создание, изменение и удаление задач.
- Смена статуса задачи.
- Назначение исполнителя.
- Установка дедлайна.
- Добавление и удаление комментариев.
- Получение комментариев задачи.
- Получение профиля пользователя.
- Получение списка моих проектов.
- Получение списка моих задач.
- Role-based authorization для
Admin,Manager,User. - Единый формат ошибок через global exception middleware.
- Логирование запуска приложения, авторизации, ошибок и создания задач.
erDiagram
ROLE ||--o{ USER : has
USER ||--o{ PROJECT : owns
USER ||--o{ PROJECT_MEMBER : joins
PROJECT ||--o{ PROJECT_MEMBER : contains
PROJECT ||--o{ TASK : contains
USER ||--o{ TASK : creates
USER ||--o{ TASK : assigned
TASK ||--o{ COMMENT : has
USER ||--o{ COMMENT : writes
USER ||--o{ REFRESH_TOKEN : owns
ROLE {
uuid id
string name
}
USER {
uuid id
string firstName
string lastName
string email
string passwordHash
uuid roleId
}
PROJECT {
uuid id
string name
string description
uuid ownerId
}
TASK {
uuid id
string title
string description
string status
datetime deadlineUtc
uuid projectId
uuid createdById
uuid assigneeId
}
COMMENT {
uuid id
string text
uuid taskId
uuid authorId
}
REFRESH_TOKEN {
uuid id
string token
datetime expiresAtUtc
datetime revokedAtUtc
uuid userId
}
| Раздел | Метод | Endpoint | Доступ |
|---|---|---|---|
| Auth | POST | /api/auth/register |
Anonymous |
| Auth | POST | /api/auth/login |
Anonymous |
| Auth | POST | /api/auth/refresh-token |
Anonymous |
| Auth | POST | /api/auth/logout |
Authorized |
| Projects | GET | /api/projects |
Authorized |
| Projects | GET | /api/projects/{id} |
Authorized |
| Projects | POST | /api/projects |
Admin, Manager |
| Projects | PUT | /api/projects/{id} |
Admin, Manager |
| Projects | DELETE | /api/projects/{id} |
Admin, Manager |
| Tasks | POST | /api/tasks |
Authorized |
| Tasks | PUT | /api/tasks/{id} |
Authorized |
| Tasks | DELETE | /api/tasks/{id} |
Authorized |
| Tasks | PATCH | /api/tasks/{id}/status |
Authorized |
| Tasks | PATCH | /api/tasks/{id}/assignee |
Admin, Manager |
| Tasks | PATCH | /api/tasks/{id}/deadline |
Authorized |
| Comments | GET | /api/tasks/{taskId}/comments |
Authorized |
| Comments | POST | /api/tasks/{taskId}/comments |
Authorized |
| Comments | DELETE | /api/comments/{id} |
Authorized |
| Users | GET | /api/users/me |
Authorized |
| Users | GET | /api/users/me/projects |
Authorized |
| Users | GET | /api/users/me/tasks |
Authorized |
Требования:
- установленный Docker Desktop;
- запущенный Docker daemon.
Команда запуска:
docker compose up --buildПосле запуска API будет доступен по адресу:
http://localhost:8080
Swagger UI:
http://localhost:8080/swagger
PostgreSQL:
Host: localhost
Port: 5432
Database: taskflow_db
Username: taskflow_user
Password: taskflow_password
Миграции EF Core применяются автоматически при запуске приложения.
- Открыть
TaskFlow.API.slnxв Visual Studio. - Запустить PostgreSQL локально или поднять только базу:
docker compose up postgres- Выбрать
TaskFlow.APIкак startup project. - Проверить строку подключения в
TaskFlow.API/appsettings.Development.json. - Запустить проект.
- Открыть
/swagger.
При первом запуске автоматически создаются два пользователя:
Admin:
Email: admin@taskflow.local
Password: Admin12345!
Manager:
Email: manager@taskflow.local
Password: Manager12345!
Обычного пользователя можно создать через endpoint:
POST /api/auth/register
- Выполнить
/api/auth/login. - Скопировать
accessTokenиз ответа. - Нажать кнопку
Authorizeв Swagger. - Ввести токен в формате:
Bearer YOUR_ACCESS_TOKEN
После этого можно вызывать защищённые endpoints.
После запуска проекта можно добавить скриншоты в папку:
docs/images/
Пример:

