Задание - link
Язык программирования: Swift
Фреймворки: Vapor
, VaporJWT
, Fluent
,
Базы данных: PostgresSQL
API-requests: Postman
Приложение содержит в себе приложение, содержащие два микросервиса (OrderAPI
и UserAPI
) отвечающие за взаимодействие с заказами и пользователями соответсвенно.
Оба сервиса являются самостоятельно-исполняемыми. Взаимодействие между ними происходит за счет общих исходников, как например, CommonModels
- таргет, хранящий в себе модели пользователя и id-запроса.
Все запросы валидируются на корректность данных (например, вход в аккаунт или количество блюд в заказе). Для большинства запросов необходим jwt-токен.
Располагается по адресу: http://127.0.0.1:8000 Работа с микросервисом
UserApi` представляет из себя инструмент для регистрации и авторизации пользователя:
- Регистарция:
Пользователь отправляет запрос, содержащий json с необходимой информацией на
get
адрес../user/signUp
. Пример запроса:
{
"username" : "Polinochka",
"email" : "[email protected]",
"password" : "Polina200503!",
"role": "chef"
}
Сервер обрабатывает значение и в случае успеха вносит пользователя в базу данных
- Авторизация:
С данными из пункта выше (пароль и почта) пользователь может войти в систему, отправив
post
запрос на адрес../user/signIn
:
{
"email" : "[email protected]",
"password" : "Polina200503!"
}
В случае успешного входа пользователю вернется JWT-токен, например:
{
"token":
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODU0MTA4MDcuODg0MDgzLCJyb2wiOiJjaGVmIiwidWlkIjoiNzdFODRFQTctQkE0My00NzZCLTgwMUYtREMzQTQ1ODg4M0JEIn0.7_9pIbL0ghhyhYzwIh7xmBXpksYTcB8qBlWfHcR_dDI"
}
Этот токен является ключевым в доступе к запросам меню и информации о пользователе.
С помощью него осуществляется аутентификация доступа к системе и чтение роли.
Токен необходимо указывать в header области запроса:
Authorization: Bearer 'jwt_token'
- Получение данных о пользователе:
Пользователь может получить данные о себе. Для этого ему надо отправить голый
get
запрос по адресу../user/data
Располагается по адресу: `http://127.0.0.1:8001
-
Получение меню: Пользователь может получить данные о всех доступных для заказа позициях меню. Пустой
get
запрос на адрес `../data -
Создание заказа: Для создания заказа на адрес
../order/make
черезpost
отправляется запрос вида:
{
"specialRequests": "Can be null",
"dishes": [
{
"name": "Брекфаст Врап",
"count": 1
},
{
"name": "Салат с индейкой",
"count": 3
},
{
"name": "Свиные ребра",
"count": 3
},
{
"name": "Шот водки",
"count": 2
}
]
}
- Получение данных о заказе:
Пользователь может получить полную информацию своем заказе через адрес
../order
иget
запрос:
{
"id": "22C93042-7DDD-423C-86BD-A71D5AD04DC7"
}
id
в данном случае - идентификатор заказа.
Для доступа к базе данных блюд у пользователя должны быть права менеджера (и выше) для обновления значений блюд и права шефа для создания и удаления блюд
- Создание блюда:
На адрес
../dish/post
черезpost
уходит json :
{
"name": "test dish",
"description": "test",
"price": 450,
"quantity": 28
}
И создается блюдо.
- Удаление блюда:
На адрес
../dish/delete
отправляетсяpost
запрос, содержащий id блюда:
{
"id": "1CC6F204-0A1D-40E7-B60D-AE14E3E861AE"
}
- Обновление информации о блюде:
Менеджер или шеф могут поменять цену или количества блюд,
post
запросы на адресdish/quantity
иdish/price
с телом:
{
"id": "1CC6F204-0A1D-40E7-B60D-AE14E3E861AE",
"newValue": 100
}
Меняют данные.
После каждой регистрации пользователя ему выдается access_token
в формате jwt
.
Токен пользователя хранит в себе информацию о id
и роли пользователя.
Токен протухает через сутки.