Заполнить .env в open_api и s3_service
В корне проекта написать
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 для запуска проекта.