Repository navigation
Реализовать Task API на .NET 9 - #1
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9cf2d54119
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Codex Review: Didn't find any major issues. Another round soon, please! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Реализует четыре эндпоинта задач из ТЗ на ASP.NET Core Minimal API, PostgreSQL / EF Core и RabbitMQ. Структура слоёв взята из dotnet-backend-template; PANiXiDA.Core не используется. Добавлены миграции БД, валидация, UTC-метки с точностью до микросекунды и RowVersion через PostgreSQL xmin: при конкурентном завершении один запрос получает 200, второй — 409.
POST возвращает Location /tasks/{id}. Проверки названия, приоритета и состояния завершения выполняет приложение; миграция RemoveTaskCheckConstraints удаляет прежние CHECK-ограничения из существующей БД без потери задач. NOT NULL и ограничения длины полей сохранены.
Application сгруппирован в Tasks/Create, GetList, Complete и Delete: отдельные команды/запрос и обработчики, общие интерфейсы в Abstractions. Presentation повторяет фичи в Features/Tasks с отдельными endpoints, DTO и mappers; TasksEndpoints регистрирует группу /tasks. HTTP-маршруты, JSON и статусы сохранены. Unit-тесты обработчиков следуют тем же папкам фич.
Событие task.completed ставится в фоновую очередь только после успешного сохранения. Publisher использует один асинхронный RabbitMQ-канал; при ошибке или переполнении логирует JSON события. На остановку отводится 4 секунды для завершения публикаций и до 1 секунды для закрытия соединения. Доставка best-effort, без outbox и confirms, согласно ТЗ.
Обычный Docker Compose поднимает API, PostgreSQL и RabbitMQ с веб-панелью на localhost:15672. Демонстрационные учётные данные настроены, опубликованные порты привязаны к loopback. README содержит последовательную инструкцию для заказчика: установка Docker, получение проекта из GitHub, запуск сервиса, вход в RabbitMQ с указанными портом и учётными данными, ручная проверка через PowerShell, остановка и повторный запуск. Просмотр результатов CI вынесен в раздел тестов.
Тесты организованы по образцу Tactical Heroes API:
Все Fact/Theory имеют русские DisplayName. Тесты запускаются через dotnet test; Testcontainers автоматически создаёт и удаляет отдельные БД и брокер. Тестовые Dockerfile и Compose удалены. Общий PANiXiDA-Infrastructure/ci-cd/dotnet-tests.yml запускает три проекта на GitHub runner, публикует TRX и покрытие. SDK 10 и xUnit v3/Microsoft.Testing.Platform используются для совместимости с шаблоном; target framework всех проектов и runtime приложения остаются .NET 9.
Проверка коммита 815c884 выполнена только в GitHub Actions, без локального запуска тестов: 21 unit + 9 integration + 20 functional = 50 прошедших тестов, без пропусков. Проверены Location при создании задачи, Unicode-пробелы в названии и обновление исходной схемы БД с сохранением данных и удалением CHECK-ограничений. Сборка рабочего Docker-образа и публикация отчётов также прошли: https://github.com/PANiXiDA/task-api/actions/runs/38943183690 .