Тестовое задание Mad Soft


Запуск


Настройка

Заполнить .env в open_api и s3_service 

Docker

В корне проекта написать

docker-compose up 

Локальный запуск

создать и активировать venv
cd open_api
fastapi dev app.py --port 8080

cd s3_service
astapi dev app.py --port 8000

Про реализацию

s3_service - "wrapper" над s3 хранилищем (я использовал s3 от selectel)

open_api - открытое api, которое дает crud мемов

Честно не оч понимаю, для чего нужен этот сервис прослойка - хотел бы это обсудить :)


Про тесты

Во-первых, тут в целом от как таковых unit тестов смысла - нет, тут надо писать интеграционные, которые тестируют всю эту сложную логику взаимодействия сервисов друг с другом. Так как иначе - мы будем тестировать прост библы, которые мы скачали (грубо говоря, будут тесты на boto3, либо ваще на алхимию - в этом явно нет смысла). Ну единственное, на что можно написать unit тесты - это функция get_file_extension. Остальное уже требует каких-то интеграционных тестов, нежели обычных юнит тестов. Про это бы я тож подискутировал.


Тз


Разработайте веб-приложение на Python, используя FastAPI, которое предоставляет API для работы с коллекцией мемов. Приложение должно состоять из двух сервисов: сервис с публичным API с бизнес-логикой и сервис для работы с медиа-файлами, используя S3-совместимое хранилище (н-р, MinIO).

Функциональность:

● GET /memes: Получить список всех мемов (с пагинацией).

● GET /memes/{id}: Получить конкретный мем по его ID.

● POST /memes: Добавить новый мем (с картинкой и текстом).

● PUT /memes/{id}: Обновить существующий мем.

● DELETE /memes/{id}: Удалить мем.

Требования:

● Используйте реляционную СУБД для хранения данных.

● Обеспечьте обработку ошибок и валидацию входных данных.

● Используйте Swagger/OpenAPI для документирования API.

● Напишите хотя бы несколько unit-тестов для проверки основной функциональности.

● Напишите Readme, из которого понятна функциональность проекта и инструкция по локальному запуску для разработки.

● Проект должен состоять минимум из: 1 сервис с публичным API, 1 сервис с приватным API для изображений, 1 сервис СУБД, 1 сервис S3-storage.

● Напишите docker-compose.yml для запуска проекта.