← Все проекты
MVP

Проект сообщества · 10 просмотров

Media_service

Backend service for video platforms, providing a REST API for video uploads, validation, and storage management. Built with FastAPI, PostgreSQL, and SQLAlchemy.

Проблема

Сервисы, где пользователи загружают видео (обучение, соцсети, портфолио), сталкиваются с одними и теми же задачами: нельзя принимать любой файл как есть, нужно проверить формат и параметры, привести видео к единому виду, сделать превью и надёжно хранить результат. Часто это сделано вручную и ломается при первой же нестандартной загрузке. Проект — учебный backend, в котором я разбираю этот процесс на практике: как принять видео, проверить его, обработать и не потерять при сбое.

Решение

Backend-сервис на FastAPI с PostgreSQL. Пользователь регистрируется и входит по JWT, загружает видео и управляет только своими файлами. Файл проверяется в два шага: тип по содержимому (libmagic) и параметры через ffprobe (кодек, разрешение, частота кадров, длительность, размер). Видео сохраняется в S3-совместимое хранилище (Yandex Object Storage) через отдельный слой Storage, в базе хранятся ключи объектов и статус обработки (uploaded → processing → processed/failed). Обработку (нормализация через FFmpeg, превью) планирую вынести в фоновый воркер.

Что уже сделано

Рабочий прототип, часть функций в переписывании.
Готово: регистрация и вход (JWT, пароли хешируются Argon2); модели User и Video, миграции Alembic; иерархия ошибок с единым обработчиком; валидация видео (размер, тип, метаданные) с unit-тестами; машина статусов обработки; абстракция хранилища и подключение S3; Docker Compose с PostgreSQL; около 30 тестов (на моках).
В работе: переписывание загрузки видео под S3 и временные файлы. Сейчас этот эндпоинт нестабилен, я привожу его в порядок.

Что дальше

Довести загрузку видео до рабочего состояния: порядок шагов с откатом при сбое, очистка временных файлов.

Привести миграции и модели к одному виду, убрать создание таблиц вне Alembic.

Интеграционные тесты на реальной PostgreSQL и CI в GitHub Actions.

Фоновая обработка видео (очередь на Redis и воркер) вместо обработки внутри запроса.

Обновить README и запустить проект одной командой из чистого clone.

Нужно: обратная связь по архитектуре и по тому, как лучше организовать обработку сбоев.

Технические разборы 0

Обратная связь по архитектуре, API, тестам и безопасности.

Разборов пока нет. Будь первым, кто разберёт проект по существу.

Обсуждение 0

Комментариев пока нет.