{"id":48961362,"url":"https://github.com/f949kaschenko/coiledsteelapi","last_synced_at":"2026-04-18T02:04:42.982Z","repository":{"id":283090325,"uuid":"949456189","full_name":"f949kaschenko/CoiledSteelAPI","owner":"f949kaschenko","description":"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.","archived":false,"fork":false,"pushed_at":"2026-02-22T12:31:42.000Z","size":36,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-22T19:48:50.061Z","etag":null,"topics":["docker","fastapi","githubaction-workflow","postgresql","pytest","python","sqlalchemy"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/f949kaschenko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-16T14:04:38.000Z","updated_at":"2026-02-22T12:32:19.000Z","dependencies_parsed_at":"2025-03-18T16:42:11.189Z","dependency_job_id":"25c0583c-6270-4b6f-9b05-0229af6f1562","html_url":"https://github.com/f949kaschenko/CoiledSteelAPI","commit_stats":null,"previous_names":["kaschenkkko/metalrollsapi","kaschenkkko/coiledsteelapi","f949kaschenko/coiledsteelapi"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/f949kaschenko/CoiledSteelAPI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f949kaschenko%2FCoiledSteelAPI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f949kaschenko%2FCoiledSteelAPI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f949kaschenko%2FCoiledSteelAPI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f949kaschenko%2FCoiledSteelAPI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/f949kaschenko","download_url":"https://codeload.github.com/f949kaschenko/CoiledSteelAPI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f949kaschenko%2FCoiledSteelAPI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31953517,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","fastapi","githubaction-workflow","postgresql","pytest","python","sqlalchemy"],"created_at":"2026-04-18T02:04:40.694Z","updated_at":"2026-04-18T02:04:42.976Z","avatar_url":"https://github.com/f949kaschenko.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv id=\"header\" align=\"center\"\u003e\n  \u003ch1\u003eCoiled Steel API\u003c/h1\u003e\n\n  ![Python](https://img.shields.io/badge/-Python_3.10-000?\u0026logo=Python)\n  ![FastAPI](https://img.shields.io/badge/-FastAPI_0.115.11-000?\u0026logo=FastAPI)\n  ![Pydantic](https://img.shields.io/badge/-Pydantic_2.10.6-000?\u0026logo=Pydantic)\n  ![SQLAlchemy](https://img.shields.io/badge/-SQLAlchemy_2.0.39-000?\u0026logo=SQLAlchemy)\n  ![PostgreSQL](https://img.shields.io/badge/-PostgreSQL-000?\u0026logo=PostgreSQL)\n  ![Docker](https://img.shields.io/badge/-Docker-000?\u0026logo=Docker)\n  ![Pytest](https://img.shields.io/badge/-Pytest-000?\u0026logo=Pytest)\n\n\u003c/div\u003e\n\nСтатус проверки линтеров и тестов:\n\n[![coiled_steel_api_workflow](https://github.com/f949kaschenko/CoiledSteelAPI/actions/workflows/main.yaml/badge.svg)](https://github.com/f949kaschenko/CoiledSteelAPI/actions/workflows/main.yaml)\n\nДокументация к API доступна:\n\n[API Documentation ](https://f949kaschenko.github.io/CoiledSteelAPI/)\n\n\u003ch2\u003eТехническое задание проекта:\u003c/h2\u003e\n\n - Добавление нового рулона на склад. Длина и вес — обязательные параметры. В случае успеха возвращает добавленный рулон;\n - Удаление рулона с указанным id со склада. В случае успеха возвращает удалённый рулон;\n- Получение списка рулонов со склада. Рассмотреть возможность фильтрации по одному из диапазонов единовременно (id/веса/длины/даты добавления/даты удаления со склада);\n- Получение статистики по рулонам за определённый период:\n  - количество добавленных рулонов;\n  - количество удалённых рулонов;\n  - средняя длина, вес рулонов, находившихся на складе в этот период;\n  - максимальная и минимальная длина и вес рулонов находившихся на складе в этот период;\n  - суммарный вес рулонов на складе за период;\n  - максимальный и минимальный промежуток между добавлением и удалением рулона.\n\n### Бонусная часть:\n\n- Получение списка рулонов с фильтрацией работает по комбинации нескольких диапазонов сразу.\n- Проект должен быть обёрнут в Docker.\n- Конфигурации к подключению к БД должны быть настраиваемыми через файл или ENV.\n- Проект должен быть покрыт тестами.\n- Проект должен проходить mypy, flake8 и прочее\n- Отсутствие глобальных переменных.\n\n### Дополнительные требования:\n- Данные по рулонам должны храниться в базе данных (желательно PostgreSQL/SQLite).\n- Должны быть обработаны стандартные кейсы ошибок (например, недоступна БД, не существует рулон при какой-то работе с ним).\n- Используемый стек: FastAPI, SQLAlchemy, pydantic (версии и до 2.0, и после 2.0 подойдут).\n\n\u003cdetails\u003e\u003csummary\u003e\u003ch2\u003e⋆☆˖⋆˖Запуск проекта 𝜗𝜚.✦ ݁˖\u003c/h2\u003e\u003c/summary\u003e\n\n```\n⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠈⢿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠘⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠸⣿⣷⡄⠀⠀⠀⠀⠀⣤⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠸⣿⣿⡄⠀⠀⠀⢸⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣿⡇⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⢻⣿⣷⡄⠀⠀⣾⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⠃⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣧⠀⠀⣿⣿⣿⣿⣿⣿⣷⣤⣤⣤⣤⣴⣾⣿⣿⣿⣿⣿⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⡆⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣧⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣦⣿⣿⣿⣿⣿⣿⠟⠛⢿⣿⣿⣿⣿⣿⠛⠻⣿⣆⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⢻⣿⣿⣿⣿⠀⠀⣿⣿⠃⠀⠀\n⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⣀⣀⣾⣿⣿⣿⣿⣦⣤⣿⣿⡆⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀\n⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⣸⣿⣿⣿⣿⡿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⣿⣿⣿⡿⠋⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⣰⣿⣿⠏⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀\n⠀⣰⣿⣿⡏⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⡟⠛⠛⠛⠛⠁⠀⠈⠙⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⠀\n⣼⣿⣿⣿⠷⠄⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀\n⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣧⡀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣿⣿⣿⣷⡀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣷⣤⡀\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⡇\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠛⠛⠛⠋⠁\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⠿⣿⣿⠿⠿⠏⠀⠀\n\n```\n\n- Перейдите в папку *docker*.\n- Создайте файл *.env* с переменными окружения:\n    ```\n    DB_HOST=\n    DB_PORT=\n    DB_NAME=\n    POSTGRES_USER=\n    POSTGRES_PASSWORD=\n\n    TEST_DB_HOST=\n    TEST_DB_PORT=\n    TEST_DB_NAME=\n    TEST_POSTGRES_USER=\n    TEST_POSTGRES_PASSWORD=\n    ```\n- Запустите контейнеры:\n  ```\n  docker-compose up -d --build\n  ```\n- В контейнере *backend* выполните миграции:\n  ```\n  docker-compose exec backend alembic upgrade head\n  ```\n- Команда для запуска тестов:\n  ```\n  docker-compose exec backend pytest\n  ```\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff949kaschenko%2Fcoiledsteelapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ff949kaschenko%2Fcoiledsteelapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff949kaschenko%2Fcoiledsteelapi/lists"}