diff --git a/README.md.backup b/README.md.backup deleted file mode 100644 index 308b3aa..0000000 --- a/README.md.backup +++ /dev/null @@ -1,158 +0,0 @@ -# fastfood -Fastapi веб приложение реализующее api для общепита. - -## Описание -Данный проект, это результат выполнения практических домашних заданий интенсива от YLAB Development. Проект реализован на фреймворке fastapi, с использованием sqlalchemy. В качестве базы данных используется postgresql. - -## Техническое задание -### Спринт 1 - Создание API -Написать проект на FastAPI с использованием PostgreSQL в качестве БД. В проекте следует реализовать REST API по работе с меню ресторана, все CRUD операции. Для проверки задания, к презентаций будет приложена Postman коллекция с тестами. Задание выполнено, если все тесты проходят успешно. -Даны 3 сущности: Меню, Подменю, Блюдо. - -Зависимости: -- У меню есть подменю, которые к ней привязаны. -- У подменю есть блюда. - -Условия: -- Блюдо не может быть привязано напрямую к меню, минуя подменю. -- Блюдо не может находиться в 2-х подменю одновременно. -- Подменю не может находиться в 2-х меню одновременно. -- Если удалить меню, должны удалиться все подменю и блюда этого меню. -- Если удалить подменю, должны удалиться все блюда этого подменю. -- Цены блюд выводить с округлением до 2 знаков после запятой. -- Во время выдачи списка меню, для каждого меню добавлять кол-во подменю и блюд в этом меню. -- Во время выдачи списка подменю, для каждого подменю добавлять кол-во блюд в этом подменю. -- Во время запуска тестового сценария БД должна быть пуста. - -В папке ./postman_scripts находятся фалы тестов Postman, для тестирования функционала проекта. - -### Спринт 2 - Docker && pytest -В этом домашнем задании надо написать тесты для ранее разработанных ендпоинтов вашего API после Вебинара №1. - -Обернуть программные компоненты в контейнеры. Контейнеры должны запускаться по одной команде “docker-compose up -d” или той которая описана вами в readme.md. - -Образы для Docker: -(API) python:3.10-slim -(DB) postgres:15.1-alpine - -1.Написать CRUD тесты для ранее разработанного API с помощью библиотеки pytest -2.Подготовить отдельный контейнер для запуска тестов. Команду для запуска указать в README.md -3.* Реализовать вывод количества подменю и блюд для Меню через один (сложный) ORM запрос. -4.** Реализовать тестовый сценарий «Проверка кол-ва блюд и подменю в меню» из Postman с помощью pytest -Если FastAPI синхронное - тесты синхронные, Если асинхронное - тесты асинхронные - - -*Оборачиваем приложение в докер. -**CRUD – create/update/retrieve/delete. - -Дополнительные материалы - -## Возможности -### Спринт 1 -В проекте реализованы 3 сущности: Menu, SubMenu и Dish. Для каждого них реализованы 4 метода http запросов: GET, POST, PATCH и DELETE c помощью которых можно управлять данными. -Для Menu доступен метод GET возвращающий все его SubMenu. Аналогично для SubMenu реализован метод для возврата всех Dish. - -### Спринт 2 -- 1й пункт ТЗ -Тесты реализованы в виде 2х классов -`TastBaseCrud` включает 3 подкласса `Menu`, `Submenu`, `Dish` которые реализуют интерфейсы взаимодействия с endpoint'ами реализованных на предыдущем спринте сущностей. Каждый подкласс реализует методы GET(получение всех сущностей), Get(получение конкректной сущности), Post(создание), Patch(обновление), Delete(удаления). Так же в классе реализованы 3 тестовых функции, которые осуществляют тестирование соответствующих endpoint'ов -`TestContinuity` реализует последовательность сценария «Проверка кол-ва блюд и подменю в меню» из Postman - -- 2й пункт ТЗ -Реализованы 3 контейнера(db, app, tests). В db написан блок "проверки здоровья", от которого зависят контейнеры app и test, который гарантирует, что зависимые контейнеры не будут запущены о полной готовности db. - -- 3й пункт ТЗ -см. функцию `get_menu_item` на 28 строке в файле -/fastfood/crud/menu.py - -- 4й пункт ТЗ -см. класс `TestContinuity` в файле -/tests/test_api.py - -## Зависимости -Для локальной установки -- postgresql Для работы сервиса необходима установленная СУБД. Должна быть создана база данных и пользователь с правами на нее. -- poetry - Система управления зависимостями в Python. - -Остальное добавится автоматически на этапе установки. - -Для запуска в контейнере -- docker -- docker-compose - -## Установка -### Docker -Для запуска необходимы установленные приложения docker и docker-compose -Клонируйте репозиторий -> `$ git clone https://git.pi3c.ru/pi3c/fastfood.git` - -Перейдите в каталог -> `$ cd fastfood` - -Создайте и запустите образы -> `$ docker-compose up -d --build` - -После успешного запуска образов документация по API будет доступна по адресу http://localhost:8000 - -Для запуска тестов pytest поднимаем контейнер tests -> `$ docker-compose up tests` - -### Linux -Установите и настройте postgresql согласно офф. документации. Создайте пользователя и бд. - -Установите систему управления зависимостями -> `$ pip[x] install poetry` - -Клонируйте репозиторий -> `$ git clone https://git.pi3c.ru/pi3c/fastfood.git` - -Перейдите в каталог - -> `$ cd fastfood` - -> `$ poetry install --no-root` - -Создастся виртуальное окружение и установятся зависимости - -Файл example.env является образцом файла .env, который необходимо создать перед запуском проекта. -В нем указанны переменные необходимые для подключения к БД. -Созданим файл .env - ->`$ cp ./example.env ./.env` - -Далее отредактируйте .env файл в соответствии с Вашими данными подключения к БД - -## Запуск -Запуск проекта возможен в 2х режимах: -- Запуск в режиме "prod" с ключем --run-server - Подразумевает наличие уже созданных таблиц в базе данных(например с помощью Alembic). Манипуляций со структурой БД не происходит. Данные не удаляются. - -- Запуск в режиме "dev" c ключем --run-test-server - В этом случае при каждом запуске проекта все таблицы с данными удаляются из БД и создаются снова согласно описанных моделей. - - -Для запуска проекта сначала активируем виртуальное окружение - -> `$ poetry shell` - -и запускаем проект в соответстующем режиме - ->`$ python[x] manage.py --ключ` - -вместо этого, так же допускается и другой вариант запуска одной командой без предварительной активации окружения - ->`$ poetry run python[x] manage.py --ключ` - - -## TODO -- Добавить миграции -- Провести рефакторинг, много дублирующего кода -- Много чего другого :) - -## Авторы -- Сергей Ванюшкин - -## Лицензия -Распространяется под [MIT лицензией](https://mit-license.org/). - - diff --git a/example.env b/example.env index 81ce7a8..918c6ed 100644 --- a/example.env +++ b/example.env @@ -1,5 +1,5 @@ -DB_HOST=localhost +DB_HOST=db DB_PORT=5432 -DB_USER=postgres -DB_PASS=postgres -DB_NAME=postgres +POSTGRES_USER=postges +POSTGRES_PASSWORD=postgres +POSTGRES_DB=fastfood_db \ No newline at end of file