Warehouse Management System — это современный REST API сервис для управления логистикой и складом, построенный на строгих принципах Clean Architecture. Приложение позволяет управлять палетами, различными типами товаров (электроника, мебель, химикаты) и асинхронно маршрутизировать задачи на доставку с помощью брокера сообщений RabbitMQ.
- Чистая архитектура (Clean Architecture): Строгое разделение ответственности на слои Domain, Application, Infrastructure и API. Бизнес-логика полностью изолирована от внешних фреймворков.
- Асинхронная обработка (Event-Driven): Использование RabbitMQ для постановки задач на доставку (Дроны, Грузовики, Корабли) и фоновые воркеры (
BackgroundService) для их параллельной обработки. - Полиморфизм данных: Использование паттерна TPH (Table-Per-Hierarchy) в Entity Framework Core для удобного хранения различных типов инвентаря (
Electronics,Furniture,Chemicals) в единой таблице. - Контейнеризация: Полная поддержка Docker и Docker Compose для развертывания БД, брокера сообщений и самого приложения одной командой.
Проект разделен на 4 основных слоя:
- 📁 WarehouseMS.Domain — Ядро системы. Содержит бизнес-сущности (
Pallet,InventoryItem), строгую доменную логику (проверка веса, вместимости) и Value Objects/Enums. Не имеет внешних зависимостей. - 📁 WarehouseMS.Application — Слой сценариев использования (Use Cases). Содержит сервисы (
WarehouseService), DTO, профилиAutoMapperи абстракции (интерфейсы) репозиториев и брокеров сообщений. - 📁 WarehouseMS.Infrastructure — Слой реализации. Содержит
ApplicationContext(EF Core), репозитории (PalletRepository), реализациюRabbitMqProducer, а также Consumers (фоновые воркеры) для обработки очередей доставки. - 📁 WarehouseMS.Api — Точка входа (Presentation Layer). Содержит REST-контроллеры, настройки Dependency Injection и Swagger-документацию.
- Язык/Платформа: C# / .NET 10.0
- База данных: PostgreSQL 16
- ORM: Entity Framework Core 10
- Брокер сообщений: RabbitMQ 7.x
- Маппинг: AutoMapper
- Тестирование: xUnit, Moq
- Инфраструктура: Docker, Docker Compose
Для запуска проекта на вашей машине потребуется Docker и .NET 10 SDK.
В корневой папке проекта выполните команду для запуска базы данных и RabbitMQ:
docker compose up -d postgres_db rabbitmq- PostgreSQL будет доступен на порту 5432
- RabbitMQ (внутренний) на порту 5670, Management UI — на 15672 (guest/guest)
Так как файлы миграций не отслеживаются в системе контроля версий, перед запуском приложения необходимо сгенерировать первичную миграцию и применить её к базе данных.
Сгенерируйте миграцию:
dotnet ef migrations add InitialCreate --project WarehouseMS.Infrastructure --startup-project WarehouseMS.ApiПримените структуру к базе данных:
dotnet ef database update --project WarehouseMS.Infrastructure --startup-project WarehouseMS.ApiЗапустите API проект через .NET CLI:
dotnet run --project WarehouseMS.ApiПосле успешного запуска перейдите в браузере по адресу: http://localhost:5000/swagger для тестирования эндпоинтов.
В проекте реализованы модульные тесты для доменной логики и сервисов слоя Application с использованием xUnit и Moq. Для запуска тестов выполните:
dotnet test