Repository navigation
Service Catalog
TravelAgency Team Bot edited this page Oct 8, 2026
·
2 revisions
Сервис каталога туров и направлений: CRUD туров, фильтрация, сортировка, пагинация, календарь цен. Является источником правды о турах для Booking и других сервисов.
- Назначение и роль
- Стек и зависимости
- Структура проектов
- Домен
- API (HTTP)
- gRPC
- Инфраструктура
- Конфигурация и запуск
- Хранение и выдача туров и направлений (directions).
- Публичное чтение каталога (GET) — без авторизации; изменение — только для Manager/Admin.
- Фильтрация и пагинация списка туров (ToursFilterDto).
- Цены и календарь — обновление цен тура (PATCH prices).
- gRPC GetTourSnapshot — для сервиса Booking при создании заявки/предложения (проверка существования тура и получение снимка данных).
Собственная БД: travel_catalog (PostgreSQL).
| Компонент | Технология |
|---|---|
| Платформа | .NET 10, ASP.NET Core |
| БД | PostgreSQL, EF Core |
| Медиатор | MediatR |
| Валидация | FluentValidation |
| JWT | для авторизации Manager/Admin на запись |
| Логирование | Serilog |
| Трейсинг | OpenTelemetry |
| Общее | Shared.Contracts, Shared.Infrastructure, Contracts.Grpc |
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/
-
Tour — сущность тура (название, описание, направление, длительность, цены, доступность и т.д.). Статусы, версия для
If-Match, проверка публикации и API управления описаны в ADR-001. Модель тура. - Direction — направление (для фильтров и привязки туров).
- Репозитории и контракты чтения/записи определены в Application/Domain; реализация в Infrastructure.
Базовые маршруты: /catalog/tours, /catalog/directions (через Gateway: /api/v1/catalog/*).
| Метод | Путь | Доступ | Описание |
|---|---|---|---|
| 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). |
| Метод | Путь | Доступ | Описание |
|---|---|---|---|
| GET | /catalog/directions | Anonymous | Список направлений (List<DirectionDto>). |
Политика авторизации для записи: ManagerOrAdmin (константа из Shared.Contracts).
- Сервис: CatalogService (пакет catalog).
- Метод: GetTourSnapshot(GetTourSnapshotRequest) → TourSnapshotResponse (tour_id, title, description, price, currency, duration_days, snapshot_taken_at, found).
- Используется Booking для проверки тура и получения актуальных данных при создании заявки/предложения. Вызовы защищены GrpcAuthInterceptor (InternalServiceToken).
- CatalogDbContext — наборы для туров, направлений, цен; миграции в Infrastructure.
- Репозитории для туров и направлений.
- CatalogGrpcService — реализация gRPC-сервера по .proto из Contracts.Grpc.
- При старте: применение миграций (UseCatalogMigrations) при соответствующей настройке.
- 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.
- Обзор проекта
- Архитектура и зависимости
- API-карта
- Gateway
- Identity
- Catalog
- Booking
- Chat
- Media
- gRPC контракты
- Архитектура
- Детали реализации
- Сервис API Gateway
- Сервис Identity
- Сервис Catalog
- ADR-001. Модель тура
- Сервис Booking
- Сервис Chat
- Сервис Media
- Содержимое сайта
- Стек и версии
- Глоссарий
- Соответствие экранов и API