Current State Media - PlutoGr/TravelAgency GitHub Wiki
Media
Обновлено: 2026-05-23
Назначение
Media сервис отвечает за:
- upload файлов (multipart)
- download файлов по id
- выдачу presigned URL
- owner-only delete
- генерацию thumbnails для изображений
Хранение: S3-compatible (MinIO в локальной инфраструктуре).
Структура проекта
TravelAgency.Media.APITravelAgency.Media.ApplicationTravelAgency.Media.DomainTravelAgency.Media.InfrastructureTravelAgency.Media.UnitTestsTravelAgency.Media.IntegrationTests
REST API
Service route prefix: /media
Public route via Gateway: /api/v1/media
| Method | Service route | Public route | Auth | Request | Response |
|---|---|---|---|---|---|
| POST | /media/upload |
/api/v1/media/upload |
RequireAuthenticated |
multipart file |
UploadMediaResponse (201) |
| GET | /media/{id} |
/api/v1/media/{id} |
RequireAuthenticated |
route id |
file stream |
| POST | /media/presign |
/api/v1/media/presign |
RequireAuthenticated |
PresignMediaQuery |
PresignMediaResponse |
| DELETE | /media/{id} |
/api/v1/media/{id} |
RequireAuthenticated |
route id |
204 |
Удаление разрешено только владельцу файла.
DTO и объекты API
Requests
- upload request (controller → command):
fileContent,fileName,contentType,sizeBytes PresignMediaQuery(mediaId, ttlSeconds?)
Responses
UploadMediaResponse(id, url, fileName, contentType, sizeBytes, thumbnails, uploadedAt)ThumbnailResponse(id, width, height, url)PresignMediaResponse(url, expiresAt)GetMediaResponse(content, contentType, fileName)(внутренний handler contract)
Доменная модель
MediaFile
Id, OriginalFileName, ContentType, SizeBytes, StorageKey, OwnerId, Status, UploadedAt, Thumbnails
Поведение:
CreateAddThumbnailMarkAsDeleted
MediaFileThumbnail
StorageKey, Width, Height
MediaFileStatus
ActiveDeleted
Конфигурация
Критичные параметры:
ConnectionStrings__MediaDbStorage__ServiceUrlStorage__AccessKeyStorage__SecretKeyStorage__BucketName(по текущему коду:media)Storage__PresignTtlMinutesUpload__MaxFileSizeBytesUpload__AllowedMimeTypesUpload__ThumbnailWidthsJwtSettings__SigningKey,JwtSettings__Issuer,JwtSettings__Audience
Health
| Method | Route | Notes |
|---|---|---|
| GET | /health/live |
liveness |
| GET | /health/ready |
readiness (db + object storage) |