Giter Site home page Giter Site logo

fastfood's Introduction

fastfood

Fastapi веб приложение реализующее api для общепита.

Описание

Данный проект, это результат выполнения практических домашних заданий интенсива от YLAB Development. Проект реализован на фреймворке fastapi, с использованием sqlalchemy. В качестве базы данных используется postgresql.

Техническое задание

Спринт 4 - Многопроцессорность, асинхронность

В этом домашнем задании необходимо: 1.Переписать текущее FastAPI приложение на асинхронное выполнение 2.Добавить в проект фоновую задачу с помощью Celery + RabbitMQ. 3.Добавить эндпоинт (GET) для вывода всех меню со всеми связанными подменю и со всеми связанными блюдами. 4.Реализовать инвалидация кэша в background task (встроено в FastAPI) 5.* Обновление меню из google sheets раз в 15 сек. 6.** Блюда по акции. Размер скидки (%) указывается в столбце G файла Menu.xlsx

Фоновая задача: синхронизация Excel документа и БД. В проекте создаем папку admin. В эту папку кладем файл Menu.xlsx (будет прикреплен к ДЗ). Не забываем запушить в гит. При внесении изменений в файл все изменения должны отображаться в БД. Периодичность обновления 15 сек. Удалять БД при каждом обновлении – нельзя.

Требования: ●Данные меню, подменю, блюд для нового эндпоинта должны доставаться одним ORM-запросом в БД (использовать подзапросы и агрегирующие функций SQL). ●Проект должен запускаться одной командой ●Проект должен соответствовать требованиям всех предыдущих вебинаров. (Не забыть добавить тесты для нового API эндпоинта)

Выполненные доп задания со *

Спринт 2 3.* Реализовать вывод количества подменю и блюд для Меню через один (сложный) ORM запрос. ./fastfood/repository/menu.py Метод get_menu_item

4.** Реализовать тестовый сценарий «Проверка кол-ва блюд и подменю в меню» из Postman с помощью pytest
    `./tests/test_postman.py`

Спринт 3 5.* Описать ручки API в соответствий c OpenAPI './openapi.json'

6.** Реализовать в тестах аналог Django reverse() для FastAPI
    './tests/urls.py'

Спринт 4 5.* Обновление меню из google sheets раз в 15 сек. ./bg_tasks/ Реализовано чтение как локальной, так и удаленной таблицы. В зависимости какой compose поднять, тот и будет использоваться

6.** Блюда по акции. Размер скидки (%) указывается в столбце G файла Menu.xlsx
    `./fastfood/service/dish.py`, метод _get_discont, подменяет сумму в выдаче,
    скидка хранится в REDIS под ключами вида DISCONT:{UUID блюда}

Зависимости

  • docker
  • docker-compose

Установка

Клонируйте репозиторий

$ git clone https://git.pi3c.ru/pi3c/fastfood.git

Перейдите в каталог

$ cd fastfood

Запуск/остановка образов:

  • Запуск FAstAPI приложения c локальным файлом для фоновой задачи

$ docker-compose -f compose_app.yml up

  • Запуск FAstAPI приложения c Google Sheets для фоновой задачи

$ docker-compose -f compose_google.yml up (ЧИТАЙТЕ СООБЩЕНИЕ В ЧАТЕ)

После успешного запуска образов документация по API будет доступна по адресу http://localhost:8000

По завершении работы остановите контейнеры

$ docker-compose -f compose_app.yml down

  • Запуск тестов

$ docker-compose -f compose_test.yml up

По завершении работы остановите контейнеры

$ docker-compose -f compose_test.yml down

TODO

  • Написать тесты для кривых данных
  • Много чего другого :)

Авторы

Лицензия

Распространяется под MIT лицензией.

fastfood's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.