Skip to content

Darowiin/enterprise-development

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AirCompany API

.NET C# Mapster

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

Domain:

Хранит основные сущности: Flight, Ticket, Passenger, AircraftModel, AircraftFamily и DataSeeder, хранящий тестовые данные

Infrastructure.InMemory:

In-memory репозитории для работы с коллекциями объектов без базы данных

Репозитории наследуются от общего InMemoryRepository, который реализует интерфейс IRepository<TEntity, int>

Infrastructure.Database:

Реализация репозиториев через Entity Framework Core с использованием Postgres

Содержит:

  • AirCompanyDbContext - конфигурация сущностей, связей, ключей, индексов
  • DbSeeder - класс для наполнения базы начальными данными из DataSeeder
  • Migrations (автоматически генерируемые миграции)
  • Repository для каждой сущности

Application.Contracts

DTO-классы двух видов для каждой сущности:

  • EntityDto - для получения сущностей из запросов
  • EntityCreateUpdateDto - для создания и изменения сущностей

А также интерфейсы для сервисов, реализованные в проекте Application

Новые DTO для батчей: BatchMessage (payload от продюсера) и BatchAckResponse (ответ консьюмера)

Application

Сервисы реализуют интерфейсы из Contracts и используют Mapster для маппинга между DTO и Entity сущностями

Добавлен TicketService.ReceiveContractList — метод для приёма батчей; возвращает количество вставленных записей (int)

Api.Host

Контроллеры, наследующие CrudControllerBase

Методы для CRUD и дополнительных запросов: топ-5 рейсов, рейсы по модели, рейсы с минимальной длительностью и т.д

Использует логирование через ILogger

App.Host

Проект для Aspire оркестратора: AppHost.cs регистрирует и запускает контейнеры с параметрами из appsettings.json

Добавлена поддержка NATS

ServiceDefaults

Содержит стандартные настройки приложения и расширения для быстрой конфигурации сервисов

Основные функции:

OpenTelemetry — настройка логирования, метрик и трассировки HTTP и ASP.NET

Health Checks — дефолтные эндпоинты /health и /alive для проверки состояния приложения

Service Discovery — интеграция с механизмом обнаружения сервисов

HTTP-клиенты — стандартные настройки, включая обработку отказов (resilience) и интеграцию с сервис-дискавери

Tests

AirCompanyFixture для инициализации и заполнения коллекций репозиториев

Unit-тесты проверяют необходимую бизнес-логику доменных сущностей и репозиториев

Generator.Nats.Host

Проект для генерации билетов и отправки через NATS-Producer-а в Consumer:

TicketGenerator - генерирует список TickerCreateUpdateDto через Bogus

GeneratorController - вызывает генерацию через TicketGenerator, генерирует заданное количество контрактов партиями по определенному количество с задержкой между партиями, и проверяет результат Producer-а для возможности дополнительной генерации до нужного числа

IProducerService - интерфейс для реализации Producer у Nats

AirCompanyNatsProducer - класс, реализующий IProducerService, публикует BatchMessage с BatchId и ждёт reply/ACK от consumer (request/reply)

SendAsync возвращает информацию о вставленных элементах (через BatchAckResponse ) - продюсер на основе этого решает, догенерировать недостающие элементы или повторить отправку

Также содержит Program.cs для запуска генератора, продюсера и отдельной OpenApi страницы для тестирования генерации через контроллер

Infrastructure.Nats

NATS-consumer проект:

AirCompanyNatsConsumer - подписывается на ValidatedSubject, обрабатывает BatchMessage, вызывает TicketService.ReceiveContractList(), затем публикует BatchAckResponse в message.ReplyTo

Обрабатывает Ack / Nak и логирует результат

Validator.Nats

Проект для валидации билетов:

TicketValidatorService - получает список TickerCreateUpdateDto из RawSubject(Producer), валидирует данные, сравнивая с данными из базы данных и отправляет в ValidatedSubject только подходящие билеты

About

Разработка корпоративных приложений. 4 курс

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%