Skip to content

Repository files navigation

TaskFlow.API

TaskFlow.API - это REST API для системы управления проектами, задачами и командной работой. Проект имитирует backend реального корпоративного сервиса: пользователи могут создавать проекты, добавлять участников, ставить задачи, назначать исполнителей, отслеживать статусы, задавать дедлайны и обсуждать задачи в комментариях.

Главная цель проекта - показать навыки Junior+/Middle ASP.NET Core Developer: чистую архитектуру, работу с базой данных, авторизацию, роли, валидацию, логирование, Docker и аккуратную организацию кода.

Суть Проекта

TaskFlow можно представить как упрощённый аналог backend-части Jira, Trello или YouTrack.

В системе есть пользователи с ролями:

  • Admin - имеет расширенный доступ к данным.
  • Manager - может создавать и управлять проектами.
  • User - участвует в проектах, работает с задачами и комментариями.

Типичный сценарий работы:

  1. Пользователь регистрируется или входит в систему.
  2. Менеджер создаёт проект и добавляет участников.
  3. В проекте создаются задачи.
  4. Задачам назначаются исполнители и дедлайны.
  5. Исполнители меняют статус задач: ToDo, InProgress, Done, Cancelled.
  6. Участники обсуждают задачи через комментарии.
  7. Каждый пользователь может посмотреть свой профиль, свои проекты и свои задачи.

Проект построен так, чтобы выглядеть как backend, который можно развивать дальше: добавить уведомления, файлы, доски Kanban, приглашения в проекты, аналитику или интеграцию с фронтендом.

Стек Технологий

  • .NET 10
  • ASP.NET Core Web API
  • Entity Framework Core
  • PostgreSQL
  • JWT Authentication
  • Refresh Token
  • Role-based Authorization
  • FluentValidation
  • AutoMapper
  • Serilog
  • Swagger / OpenAPI
  • Docker
  • Docker Compose
  • Clean Architecture
  • Repository Pattern
  • Unit of Work
  • Dependency Injection
  • Global Exception Middleware
  • Async/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
Loading

Структура Проекта

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.
  • Логирование запуска приложения, авторизации, ошибок и создания задач.

ER-Диаграмма

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
    }
Loading

API Endpoints

Раздел Метод 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

Требования:

  • установленный 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 применяются автоматически при запуске приложения.

Запуск Через Visual Studio

  1. Открыть TaskFlow.API.slnx в Visual Studio.
  2. Запустить PostgreSQL локально или поднять только базу:
docker compose up postgres
  1. Выбрать TaskFlow.API как startup project.
  2. Проверить строку подключения в TaskFlow.API/appsettings.Development.json.
  3. Запустить проект.
  4. Открыть /swagger.

Демо-Пользователи

При первом запуске автоматически создаются два пользователя:

Admin:
Email: admin@taskflow.local
Password: Admin12345!

Manager:
Email: manager@taskflow.local
Password: Manager12345!

Обычного пользователя можно создать через endpoint:

POST /api/auth/register

Авторизация В Swagger

  1. Выполнить /api/auth/login.
  2. Скопировать accessToken из ответа.
  3. Нажать кнопку Authorize в Swagger.
  4. Ввести токен в формате:
Bearer YOUR_ACCESS_TOKEN

После этого можно вызывать защищённые endpoints.

Скриншоты Swagger

После запуска проекта можно добавить скриншоты в папку:

docs/images/

Пример:

![Swagger overview](docs/images/swagger-overview.png)
![Swagger authorization](docs/images/swagger-authorize.png)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages