Skip to content

OrderManagementSystem/rest-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Order Management System - REST API

Запуск

Запуск сервера с подготовленными тестовыми данными
java -jar -Dspring.profiles.active=development rest-api-1.0.0.jar

Запуск сервера без таких данных
java -jar -Dspring.profiles.active=production rest-api-1.0.0.jar

По умолчанию сервер будет использовать MySQL базу данных с такими данными

url: localhost:3306/oms
username: root
password: root

и запускаться на порте 8080

Чтобы изменить эти данные, нужно отредактировать файл rest-api-1.0.0.jar\BOOT-INF\classes\application.yml (исходный файл src\main\resources\application.yml), изменив spring.datasource и server.port.

Описание API

В системе управления заказами есть заказы, заказчики и исполнители. У заказчиков и исполнителей есть деньги, а заказы стоят денег. Любой пользователь может зарегистрироваться как заказчик или как исполнитель (только одна роль на аккаунт). Для упрощения заказчик при регистрации получает 500 виртуальных рублей на счет, а исполнитель - 300.

Заказчик может создать новый заказ, указав его описание и сумму, которую получит исполнитель, когда выполнит его. Этот заказ появится в списке заказов заказчика и в списке новых заказов, которые видят исполнители, но не видят заказчики. Заказчики видят, только заказы, которые опубликовали они сами. Также заказчик может принять заказ у исполнителя, если тот пометил его как выполненный. В таком случае со счета заказчика будет списана сумма, которую заказчик предложил при регистрации заказа, плюс коммиссия в 5% с суммы заказа. Исполнителю на счёт поступит сумма, равная стоимости заказа (без дополнительных 5% комиссии).

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

Для защиты API используется технология OAuth2 без refresh токена и с живущим 24 часа access токеном.

Жизненный цикл заказа

WAITING

Заказ создан заказчиком. У него есть описание и цена, но нет исполнителя. Заказ ожидает, пока его возьмет какой-нибудь исполнитель.

IN PROGRESS

Заказ выполняется. У заказа появился исполнитель, который взял этот заказ.

READY

Заказ выполнен и ожидает подтверждения и оплаты заказчиком.

COMPLETED

Заказ выполнен, подтвержден заказчиком и оплачен. Деньги поступили со счета заказчика на счет исполнителя.

Endpoints

  • Получение access токена
    POST /oauth/token?client_id=ид_клиента&client_secret=пароль_клиента&grant_type=password&username=имя_пользователя&password=пароль
    при последующих запросах полученный access_token ужно установить в заголовок 'Authorization' = 'Bearer токен'.
  • Регистрация нового пользователя
    POST /users {"username":"имя_пользователя","password":"пароль","userType":"Performer/Customer"}
  • Получение объекта авторизованного в данный момент пользователя
    GET /authenticated
  • Получение списка новых заказов
    GET /orders{?page&size&sort}
    параметры нужны для пагинации результатов запроса, чтобы не получать сразу весь огромный список заказов.
  • Получение списка заказов пользователя
    GET /users/{id}/orders{?page&size&sort}
    где, id - числовой идентификатор пользователя. Метод доступен только пользователю с этим id. Если пользователь зарегистрирован как исполнитель, то он получит в ответ все заказы, в которых он является исполнителем. Если пользователь - заказчик, то он получит список заказов, которые он опубликовал.
  • Создание нового заказа
    POST /orders {"description":"описание заказа","price":цена_заказа}
  • Взятие заказа исполнителем
    PATCH /orders/{id}/take
    исполнитель будет указан как исполнитель этого заказа, и изменится статус заказа.
  • Отправка заказа на проверку/подтверждение исполнителю
    PATCH /orders/{id}/pass
    статус заказа будет изменен.
  • Принятие и оплата заказа
    PATCH /orders/{id}/accept
    произойдет списание средств со счета заказчика и зачисление на счёт исполнителя, статус заказа будет изменен.