Шарапов Егор Сергеевич, БПИ219
- secrets
- sqlite3
- datetime
- re
- logging
- passlib
- time
- flask
- coloredlogs
При работе с базами данных использовались подготовленные выражения для защиты от инъекций.
Данный модуль - микросервис аутентификации.
- app.py (содержит все нужные конечные точки для авторизации, регистрации, продления сессии, получения информации для пользователя)
Данный модуль содержит набор вспомогательных функций.
- utils.py (содержит функции создания баз данных, получения хэшей, проверки паролей и тд.)
Данный модуль - просто директория для хранения баз данных.
- database.db (содержит две таблицы: user и session, содержащие нужную для аутентификации информацию.)
- order.db (содержит три таблицы, содержащие нужную для работы с блюдами и заказами информацию.)
Данный модуль - микросервис работы с блюдами и заказами.
- app.py (содержит все нужные конечные точки для работы с заказами и блюдами)
Запускает микросервисы и оформляет логирование всей системы.
Адрес: http://127.0.0.1:5000/
Фактически проверка связи с микросервисом, возвращает:{"message": "Hello!"}
Адрес: http://127.0.0.1:5000/register
Content-Type: application/json
Принимает на вход только json обьект формата{ "username": "Kulufer", "email": "root@kgs.com", "password": "ilovekgs111", "role": "customer" }Возвращает сообщение о статусе. Производит проверку на наличие такого пользователя в системе и на адекватность адрес электронной почты.
Адрес: http://127.0.0.1:5000/login
Content-Type: application/json
Принимает на вход только json обьект формата{ "email": "root_kit@kgs.com", "password": "ilovekgs111" }Возвращает сообщение о статусе. И токен сессии, если логин произошёл успешно.
Адрес: http://127.0.0.1:5000/user
Authorization: <Токен пользователя>
Если сесссия пользователя существует и не истекла, возвращает данные о нём:{ "email": "root_kit@kgs.com", "id": 2, "role": "customer", "username": "Andrey Tryhard" }
Адрес: 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" }Возвращает сообщение о статусе. Производит проверку на наличие такого пользователя в системе, проверяет наличие продукты, удаляет их со склада, добавляет заказ, отмечая его как ожидающий.
Адрес: http://127.0.0.1:3000/orders/process
Исполняет заказы с некторой задержкой, меняя им статус. Возвращает сообщение о статусе вида:{ "message": "Orders processed successfully" }
Адрес: http://127.0.0.1:3000/orders/int:номер_заказа
Возвращает сообщение о заказе по его номеру вида:{ "order_id": 1, "special_requests": "No onions", "status": "completed", "user_id": 1 }
Адрес: 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" ] }
Адрес: 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" }Возвращает сообщение о статусе создания блюда.
Адрес: 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" }Возвращает сообщение о статусе изменения блюда.
Адрес: http://127.0.0.1:3000/dishes
Разрешение по ролям:manager
Content-Type: application/json
Принимает на вход только json объект формата{ "user_id": "3", "id": "7" }Возвращает сообщение о статусе удаления блюда.
Адрес: 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