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

https://github.com/f949kaschenko/coiledsteelapi

REST API for managing metal coils in a warehouse. Built with FastAPI, SQLAlchemy, and PostgreSQL. Supports advanced filtering, statistics, Docker deployment, and full test coverage.
https://github.com/f949kaschenko/coiledsteelapi

docker fastapi githubaction-workflow postgresql pytest python sqlalchemy

Last synced: 25 days ago
JSON representation

REST API for managing metal coils in a warehouse. Built with FastAPI, SQLAlchemy, and PostgreSQL. Supports advanced filtering, statistics, Docker deployment, and full test coverage.

Awesome Lists containing this project

README

          


Coiled Steel API

![Python](https://img.shields.io/badge/-Python_3.10-000?&logo=Python)
![FastAPI](https://img.shields.io/badge/-FastAPI_0.115.11-000?&logo=FastAPI)
![Pydantic](https://img.shields.io/badge/-Pydantic_2.10.6-000?&logo=Pydantic)
![SQLAlchemy](https://img.shields.io/badge/-SQLAlchemy_2.0.39-000?&logo=SQLAlchemy)
![PostgreSQL](https://img.shields.io/badge/-PostgreSQL-000?&logo=PostgreSQL)
![Docker](https://img.shields.io/badge/-Docker-000?&logo=Docker)
![Pytest](https://img.shields.io/badge/-Pytest-000?&logo=Pytest)

Статус проверки линтеров и тестов:

[![coiled_steel_api_workflow](https://github.com/f949kaschenko/CoiledSteelAPI/actions/workflows/main.yaml/badge.svg)](https://github.com/f949kaschenko/CoiledSteelAPI/actions/workflows/main.yaml)

Документация к API доступна:

[API Documentation ](https://f949kaschenko.github.io/CoiledSteelAPI/)

Техническое задание проекта:

- Добавление нового рулона на склад. Длина и вес — обязательные параметры. В случае успеха возвращает добавленный рулон;
- Удаление рулона с указанным id со склада. В случае успеха возвращает удалённый рулон;
- Получение списка рулонов со склада. Рассмотреть возможность фильтрации по одному из диапазонов единовременно (id/веса/длины/даты добавления/даты удаления со склада);
- Получение статистики по рулонам за определённый период:
- количество добавленных рулонов;
- количество удалённых рулонов;
- средняя длина, вес рулонов, находившихся на складе в этот период;
- максимальная и минимальная длина и вес рулонов находившихся на складе в этот период;
- суммарный вес рулонов на складе за период;
- максимальный и минимальный промежуток между добавлением и удалением рулона.

### Бонусная часть:

- Получение списка рулонов с фильтрацией работает по комбинации нескольких диапазонов сразу.
- Проект должен быть обёрнут в Docker.
- Конфигурации к подключению к БД должны быть настраиваемыми через файл или ENV.
- Проект должен быть покрыт тестами.
- Проект должен проходить mypy, flake8 и прочее
- Отсутствие глобальных переменных.

### Дополнительные требования:
- Данные по рулонам должны храниться в базе данных (желательно PostgreSQL/SQLite).
- Должны быть обработаны стандартные кейсы ошибок (например, недоступна БД, не существует рулон при какой-то работе с ним).
- Используемый стек: FastAPI, SQLAlchemy, pydantic (версии и до 2.0, и после 2.0 подойдут).

⋆☆˖⋆˖Запуск проекта 𝜗𝜚.✦ ݁˖

```
⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠈⢿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠘⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠸⣿⣷⡄⠀⠀⠀⠀⠀⣤⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠸⣿⣿⡄⠀⠀⠀⢸⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣿⡇⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢻⣿⣷⡄⠀⠀⣾⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⠃⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣧⠀⠀⣿⣿⣿⣿⣿⣿⣷⣤⣤⣤⣤⣴⣾⣿⣿⣿⣿⣿⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⡆⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣧⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣦⣿⣿⣿⣿⣿⣿⠟⠛⢿⣿⣿⣿⣿⣿⠛⠻⣿⣆⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⢻⣿⣿⣿⣿⠀⠀⣿⣿⠃⠀⠀
⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⣀⣀⣾⣿⣿⣿⣿⣦⣤⣿⣿⡆⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀
⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⣸⣿⣿⣿⣿⡿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⣿⣿⣿⡿⠋⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣰⣿⣿⠏⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀
⠀⣰⣿⣿⡏⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⡟⠛⠛⠛⠛⠁⠀⠈⠙⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⠀
⣼⣿⣿⣿⠷⠄⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀
⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣧⡀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣿⣿⣿⣷⡀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣷⣤⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠛⠛⠛⠋⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⠿⣿⣿⠿⠿⠏⠀⠀

```

- Перейдите в папку *docker*.
- Создайте файл *.env* с переменными окружения:
```
DB_HOST=
DB_PORT=
DB_NAME=
POSTGRES_USER=
POSTGRES_PASSWORD=

TEST_DB_HOST=
TEST_DB_PORT=
TEST_DB_NAME=
TEST_POSTGRES_USER=
TEST_POSTGRES_PASSWORD=
```
- Запустите контейнеры:
```
docker-compose up -d --build
```
- В контейнере *backend* выполните миграции:
```
docker-compose exec backend alembic upgrade head
```
- Команда для запуска тестов:
```
docker-compose exec backend pytest
```