Запуск сервера с подготовленными тестовыми данными
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.
В системе управления заказами есть заказы, заказчики и исполнители. У заказчиков и исполнителей есть деньги, а заказы стоят денег. Любой пользователь может зарегистрироваться как заказчик или как исполнитель (только одна роль на аккаунт). Для упрощения заказчик при регистрации получает 500 виртуальных рублей на счет, а исполнитель - 300.
Заказчик может создать новый заказ, указав его описание и сумму, которую получит исполнитель, когда выполнит его. Этот заказ появится в списке заказов заказчика и в списке новых заказов, которые видят исполнители, но не видят заказчики. Заказчики видят, только заказы, которые опубликовали они сами. Также заказчик может принять заказ у исполнителя, если тот пометил его как выполненный. В таком случае со счета заказчика будет списана сумма, которую заказчик предложил при регистрации заказа, плюс коммиссия в 5% с суммы заказа. Исполнителю на счёт поступит сумма, равная стоимости заказа (без дополнительных 5% комиссии).
Исполнитель может просматривать список заказов, которые создали заказчики, но еще никто не взял. Из этого списка исполнитель может взять заказ, который появится в списке заказов исполнителя. После того, как исполнитель выполнит заказ, он может пометить его как выполненный и ожидать, пока заказчик примет и оплатит его.
Для защиты API используется технология OAuth2 без refresh токена и с живущим 24 часа access токеном.
Заказ создан заказчиком. У него есть описание и цена, но нет исполнителя. Заказ ожидает, пока его возьмет какой-нибудь исполнитель.
Заказ выполняется. У заказа появился исполнитель, который взял этот заказ.
Заказ выполнен и ожидает подтверждения и оплаты заказчиком.
Заказ выполнен, подтвержден заказчиком и оплачен. Деньги поступили со счета заказчика на счет исполнителя.
- Получение 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
произойдет списание средств со счета заказчика и зачисление на счёт исполнителя, статус заказа будет изменен.