Skip to content

Service Catalog

TravelAgency Team Bot edited this page Oct 8, 2026 · 2 revisions

Сервис Catalog (TravelAgency.Catalog)

Сервис каталога туров и направлений: CRUD туров, фильтрация, сортировка, пагинация, календарь цен. Является источником правды о турах для Booking и других сервисов.


Содержание

  1. Назначение и роль
  2. Стек и зависимости
  3. Структура проектов
  4. Домен
  5. API (HTTP)
  6. gRPC
  7. Инфраструктура
  8. Конфигурация и запуск

1) Назначение и роль

  • Хранение и выдача туров и направлений (directions).
  • Публичное чтение каталога (GET) — без авторизации; изменение — только для Manager/Admin.
  • Фильтрация и пагинация списка туров (ToursFilterDto).
  • Цены и календарь — обновление цен тура (PATCH prices).
  • gRPC GetTourSnapshot — для сервиса Booking при создании заявки/предложения (проверка существования тура и получение снимка данных).

Собственная БД: travel_catalog (PostgreSQL).


2) Стек и зависимости

Компонент Технология
Платформа .NET 10, ASP.NET Core
БД PostgreSQL, EF Core
Медиатор MediatR
Валидация FluentValidation
JWT для авторизации Manager/Admin на запись
Логирование Serilog
Трейсинг OpenTelemetry
Общее Shared.Contracts, Shared.Infrastructure, Contracts.Grpc

3) Структура проектов

src/Services/Catalog/
├── TravelAgency.Catalog.Domain/
├── TravelAgency.Catalog.Application/   # GetTours, GetTourById, CreateTour, UpdateTour, UpdateTourPrices, DeleteTour
├── TravelAgency.Catalog.Infrastructure/  # DbContext, репозитории, CatalogGrpcService
├── TravelAgency.Catalog.API/             # ToursController, DirectionsController
├── TravelAgency.Catalog.UnitTests/
└── TravelAgency.Catalog.IntegrationTests/

4) Домен

  • Tour — сущность тура (название, описание, направление, длительность, цены, доступность и т.д.). Статусы, версия для If-Match, проверка публикации и API управления описаны в ADR-001. Модель тура.
  • Direction — направление (для фильтров и привязки туров).
  • Репозитории и контракты чтения/записи определены в Application/Domain; реализация в Infrastructure.

5) API (HTTP)

Базовые маршруты: /catalog/tours, /catalog/directions (через Gateway: /api/v1/catalog/*).

Tours

Метод Путь Доступ Описание
GET /catalog/tours Anonymous Список туров с фильтром и пагинацией (PagedResult<TourSummaryDto>).
GET /catalog/tours/{id} Anonymous Детали тура по Id (TourDto).
POST /catalog/tours Manager, Admin Создание тура; возврат 201 + TourDto.
PUT /catalog/tours/{id} Manager, Admin Обновление тура.
PATCH /catalog/tours/{id}/prices Manager, Admin Обновление цен тура.
DELETE /catalog/tours/{id} Manager, Admin Удаление тура (204).

Directions

Метод Путь Доступ Описание
GET /catalog/directions Anonymous Список направлений (List<DirectionDto>).

Политика авторизации для записи: ManagerOrAdmin (константа из Shared.Contracts).


6) gRPC

  • Сервис: CatalogService (пакет catalog).
  • Метод: GetTourSnapshot(GetTourSnapshotRequest) → TourSnapshotResponse (tour_id, title, description, price, currency, duration_days, snapshot_taken_at, found).
  • Используется Booking для проверки тура и получения актуальных данных при создании заявки/предложения. Вызовы защищены GrpcAuthInterceptor (InternalServiceToken).

7) Инфраструктура

  • CatalogDbContext — наборы для туров, направлений, цен; миграции в Infrastructure.
  • Репозитории для туров и направлений.
  • CatalogGrpcService — реализация gRPC-сервера по .proto из Contracts.Grpc.
  • При старте: применение миграций (UseCatalogMigrations) при соответствующей настройке.

8) Конфигурация и запуск

  • ConnectionStrings:CatalogDb — строка к PostgreSQL (БД travel_catalog).
  • JwtSettings — для проверки токена при операциях записи (Manager/Admin).
  • GrpcSettings:InternalServiceToken — для приёма gRPC-вызовов от Booking.
  • В Docker Compose: catalog-service, порт 5020→8080, зависит от postgres. ASPNETCORE_RUN_MIGRATIONS=true.

См. также: Архитектура, Сервис API Gateway.

Clone this wiki locally