Skip to content

1rlan/SDRestApi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

SDRestApi

Контрольное домашнее задание №4 по курсу Конструирования программного обеспечения
Выполнил студент группы БПИ216 Абушахманов Ирлан

Задание - link

Стек

Язык программирования: Swift Фреймворки: Vapor, VaporJWT, Fluent, Базы данных: PostgresSQL API-requests: Postman

Архитектура

Приложение содержит в себе приложение, содержащие два микросервиса (OrderAPI и UserAPI) отвечающие за взаимодействие с заказами и пользователями соответсвенно. Оба сервиса являются самостоятельно-исполняемыми. Взаимодействие между ними происходит за счет общих исходников, как например, CommonModels - таргет, хранящий в себе модели пользователя и id-запроса.

Примечание

Все запросы валидируются на корректность данных (например, вход в аккаунт или количество блюд в заказе). Для большинства запросов необходим jwt-токен.

Работа программы

UserAPI

Располагается по адресу: 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'

‼️ Во всех запросах далее (кроме запроса меню) необходим JWT токен.

  • Получение данных о пользователе: Пользователь может получить данные о себе. Для этого ему надо отправить голый get запрос по адресу ../user/data

UserAPI

Меню + заказы

Располагается по адресу: `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
}

Меняют данные.

JWT

После каждой регистрации пользователя ему выдается access_token в формате jwt. Токен пользователя хранит в себе информацию о id и роли пользователя. Токен протухает через сутки.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published