Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/swimmwatch/road-to-the-python-assignment-1

Road to the Python Assignment
https://github.com/swimmwatch/road-to-the-python-assignment-1

Last synced: 11 days ago
JSON representation

Road to the Python Assignment

Awesome Lists containing this project

README

        

# road-to-the-python-assignment-1

Необходимо разработать HTTP REST API для ведения учета питомцев (собак, кошек, и т.д).

## Требования
- Результат задания нужно залить ввиде PR.
- Написать к нему README ввиде комментария в PR (инструкция по запуску, замечания и т.д.)

### Опционально
- Автотесты
- Линтеры

## Технологии
Требуется использовать следующие технологии:
- Python
- FastAPI
- PostgreSQL
- S3 (minio)
- Docker (docker-compose)
- Swagger

## Модели
**Питомец:**
- ID.
- Дата создания
- Дата обновления
- Фотографии.
- Имя
- Мин. кол-во символов `3`.
- Макс. кол-во символов `28`.
- Во́зраст (кол-во лет).
- Дата рождения
- Мин. дата `01.01.1900`.
- Дата смерти
- Опциональное поле
- Тип (кошка, собака и т.д)
- Пол
- Описание
- Мин. кол-во символов `0`.
- Макс. кол-во символов `1024`.

**Фотография:**
- ID.
- Дата создания
- Ссылка

## Описание API
### API Key Authentication
- В конфиге проекта нужно добавить параметр `API_KEY`
- Все обработчики запросов должны принимать header `X-API-KEY`
- Переданный `X-API-KEY` сравнивается с эталонным `API_KEY`

### Функционал
- Создание записи питомца. **Примечание:** при создании записи питомца не нужно указывать фотограции;
- Загрузить фотографию питомца. Поддерживаются следующие форматы фотографий: `png`, `jpeg`, `webp`. При загрузке файлов, сами файлы нужно конвертировать в один формат (например, `jpeg`);
- Получение детальной запись питомца по ID;
- Удаление фотографии питомца по ID;
- Получение списка питомцев. Нужно реализовать:
- Поиск. Включение подстроки в строку. Игнорировать регистр. Поля:
- Имя
- Описание
- Фильтрация:
- Возраст `>=`
- Возраст `<=`
- Пагинация (limit/offset)
- Сортировка:
- Дата создания
- Возраст
- Редактирование записи питомца по ID. Поля, которые можно редактировать:
- Имя
- Дата рождения
- Дата смерти
- Описание