Приложение для расчета расписания приема таблеток, содержит gRPC/Rest API реализацию.
- python
- uv
- FastAPI
- grpcio
- Docker
- pytest
- precommit
- PostgreSQL
- alembic
- ruff
- just
- editorconfig
Для составления расписания был использован cron синтаксис, благодаря его гибкой настройке, легкости и большой истории.
Например
*/5 это каждые пять единиц времени, можно создавать перечисления 5-10 и тд.
Для периодичности в один раз в день достаточно будет указать час приёма 0 12 * * *
curl -X 'POST' \
'<http://localhost:8080/schedule>' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"medicine_name": "string",
"intake_period": "0 12 * * *",
"user_id": 0,
"intake_finish": "2025-05-09T15:24:42.430Z",
"intake_start": "2025-05-08T18:53:08.620660Z"
}'Создайте .env файл в корне проекта
POSTGRES_DB=api
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_PORT=5432
NEXT_TAKINGS_PERIOD=P3D
SCHEDULE_LOWEST_BOUND=10:10
SCHEDULE_HIGHEST_BOUND=22:10NEXT_TAKINGS_PERIOD - это конфигурационная переменная для эндпоинта next_takings, записывается в формате ISO_8601
Ограничения по времени лекарств по умолчанию с 8:00 до 22:00, но можно настроить через переменные окружения SCHEDULE_LOWEST_BOUND нижняя граница и SCHEDULE_HIGHEST_BOUND верхняя граница соответственно, эти переменные окнужения заполяются в соответствии с форматом времени.
Проект разрабатывался в среде Development Containers, для создания такой же среды как и у автора, достаточно установить расширение dev containers в IDE и запустить приложение в контейнере. В этой среде будет установлена база данных dev и test на порту 5432, установлены расширения для работы с кодом (только для vscode).
docker compose up docker compose -f docker-compose.tests.yaml up --build --exit-code-from tests