Skip to content

Kratosterra/Order-processing-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ДЗ 4. Система обработки заказов ресторана

Подготовил:

Шарапов Егор Сергеевич, БПИ219

Дополнительная информация

Использованные технологии

Библиотеки

  • secrets
  • sqlite3
  • datetime
  • re
  • logging
  • passlib
  • time
  • flask
  • coloredlogs

Замечания

При работе с базами данных использовались подготовленные выражения для защиты от инъекций.

Структура проекта

authorization

Данный модуль - микросервис аутентификации.

  • app.py (содержит все нужные конечные точки для авторизации, регистрации, продления сессии, получения информации для пользователя)

common

Данный модуль содержит набор вспомогательных функций.

  • utils.py (содержит функции создания баз данных, получения хэшей, проверки паролей и тд.)

database

Данный модуль - просто директория для хранения баз данных.

  • database.db (содержит две таблицы: user и session, содержащие нужную для аутентификации информацию.)
  • order.db (содержит три таблицы, содержащие нужную для работы с блюдами и заказами информацию.)

processing

Данный модуль - микросервис работы с блюдами и заказами.

  • app.py (содержит все нужные конечные точки для работы с заказами и блюдами)

main.py

Запускает микросервисы и оформляет логирование всей системы.

Структура микросервисов

authorization

GET hi

Адрес: http://127.0.0.1:5000/
Фактически проверка связи с микросервисом, возвращает: {"message": "Hello!"}

POST registration

Адрес: http://127.0.0.1:5000/register
Content-Type: application/json
Принимает на вход только json обьект формата

{
   "username": "Kulufer",
   "email": "root@kgs.com",
   "password": "ilovekgs111",
   "role": "customer"
}

Возвращает сообщение о статусе. Производит проверку на наличие такого пользователя в системе и на адекватность адрес электронной почты.

POST login

Адрес: http://127.0.0.1:5000/login
Content-Type: application/json
Принимает на вход только json обьект формата

{
   "email": "root_kit@kgs.com",
   "password": "ilovekgs111"
}

Возвращает сообщение о статусе. И токен сессии, если логин произошёл успешно.

GET user information

Адрес: http://127.0.0.1:5000/user
Authorization: <Токен пользователя>
Если сесссия пользователя существует и не истекла, возвращает данные о нём:

{
  "email": "root_kit@kgs.com",
  "id": 2,
  "role": "customer",
  "username": "Andrey Tryhard"
}

processing

POST create order

Адрес: http://127.0.0.1:3000/orders
Content-Type: application/json
Принимает на вход только json обьект формата

{
   "user_id": 2,
   "dishes": [
       {
           "dish_id": 1,
           "quantity": 6,
           "price": 10.99
       },
       {
           "dish_id": 2,
           "quantity": 1,
           "price": 7.99
       }
   ],
   "special_requests": "No onions"
}

Возвращает сообщение о статусе. Производит проверку на наличие такого пользователя в системе, проверяет наличие продукты, удаляет их со склада, добавляет заказ, отмечая его как ожидающий.

POST process order

Адрес: http://127.0.0.1:3000/orders/process
Исполняет заказы с некторой задержкой, меняя им статус. Возвращает сообщение о статусе вида:

{
  "message": "Orders processed successfully"
}

GET get order info

Адрес: http://127.0.0.1:3000/orders/int:номер_заказа
Возвращает сообщение о заказе по его номеру вида:

{
  "order_id": 1,
  "special_requests": "No onions",
  "status": "completed",
  "user_id": 1
}

GET get dish

Адрес: http://127.0.0.1:3000/dishes
Разрешение по ролям: chef, manager, customer
Content-Type: application/json
Принимает на вход только json объект формата

{
    "user_id": "3",
    "id": "1"
}

Возвращает сообщение о блюде:

{
  "dish": [
    1,
    "Паста",
    "Сесть на бутылку, но приготовить пасту!",
    10.99,
    6,
    "True",
    "2023-05-26 10:50:06",
    "2023-05-26 10:51:26"
  ]
}

POST create dish

Адрес: http://127.0.0.1:3000/dishes
Разрешение по ролям: manager
Content-Type: application/json
Принимает на вход только json объект формата

{
   "user_id": "3",
   "name": "5-ая колонна",
   "description": "Срубить бы её...",
   "price": 177.99,
   "quantity": 34,
   "is_available": "True"
}

Возвращает сообщение о статусе создания блюда.

PUT update dish

Адрес: http://127.0.0.1:3000/dishes
Разрешение по ролям: manager
Content-Type: application/json
Принимает на вход только json объект формата

{
    "user_id": "3",
    "id": 4,
    "name": "Капуста по-флотски НОВАЯ",
    "description": "Когда на флоте кончались макароны, в бой вступала она...",
    "price": 1,
    "quantity": 10000,
    "is_available": "True"
}

Возвращает сообщение о статусе изменения блюда.

DELETE delete dish

Адрес: http://127.0.0.1:3000/dishes
Разрешение по ролям: manager
Content-Type: application/json
Принимает на вход только json объект формата

{
    "user_id": "3",
    "id": "7"
}

Возвращает сообщение о статусе удаления блюда.

GET get menu

Адрес: http://127.0.0.1:3000/menu
Возвращает информацию о меню, то есть только информацию о доступных блюдах в формате:

{
 "menu": [
   {
     "created_at": "2023-05-26 10:52:40",
     "description": "Блюдо богов!",
     "id": 2,
     "is_available": true,
     "name": "Шаурма",
     "price": 7.99,
     "quantity": 148,
     "updated_at": "2023-05-26 10:54:47"
   },
   {
     "created_at": "2023-05-26 12:17:40",
     "description": "Когда на флоте кончались макароны, в бой вступала она...",
     "id": 4,
     "is_available": true,
     "name": "Капуста по-флотски НОВАЯ",
     "price": 1.0,
     "quantity": 10000,
     "updated_at": "2023-05-26 12:19:58"
   },
   {
     "created_at": "2023-05-26 12:25:31",
     "description": "Срубить бы её...",
     "id": 5,
     "is_available": true,
     "name": "5-ая колонна",
     "price": 177.99,
     "quantity": 34,
     "updated_at": "2023-05-26 12:25:31"
   }
 ]
}

Запуск

Обязательно отформатируйте main.py для запуска определёного микросервиса!

python3 main.py

About

Система обработки заказов ресторана.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages