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.API
  • TravelAgency.Media.Application
  • TravelAgency.Media.Domain
  • TravelAgency.Media.Infrastructure
  • TravelAgency.Media.UnitTests
  • TravelAgency.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

Поведение:

  • Create
  • AddThumbnail
  • MarkAsDeleted

MediaFileThumbnail

StorageKey, Width, Height

MediaFileStatus

  • Active
  • Deleted

Конфигурация

Критичные параметры:

  • ConnectionStrings__MediaDb
  • Storage__ServiceUrl
  • Storage__AccessKey
  • Storage__SecretKey
  • Storage__BucketName (по текущему коду: media)
  • Storage__PresignTtlMinutes
  • Upload__MaxFileSizeBytes
  • Upload__AllowedMimeTypes
  • Upload__ThumbnailWidths
  • JwtSettings__SigningKey, JwtSettings__Issuer, JwtSettings__Audience

Health

Method Route Notes
GET /health/live liveness
GET /health/ready readiness (db + object storage)