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.
- Host: GitHub
- URL: https://github.com/f949kaschenko/coiledsteelapi
- Owner: f949kaschenko
- Created: 2025-03-16T14:04:38.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2026-02-22T12:31:42.000Z (3 months ago)
- Last Synced: 2026-02-22T19:48:50.061Z (3 months ago)
- Topics: docker, fastapi, githubaction-workflow, postgresql, pytest, python, sqlalchemy
- Language: Python
- Homepage:
- Size: 35.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Coiled Steel API







Статус проверки линтеров и тестов:
[](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
```