Проект сообщества · 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
Комментариев пока нет.