Приложение эмулирующее работу магазина по продаже пива
Ниже перечислены сущности в предметной области проекта их поля и связи.
Поля:
- Тип
- Наличие
- Название
- Описание
- Крепость
- Плотность
- Страна производитель
- Цена
Поля:
- Покупатель
- Статус
- Количество
- Общая стоимость
- Аннулирован
- Список заказа
Связи:
- список наименований пива, появляется при оформлении заказа ("Beer" to "Order")
- покупатель, появляется при оформлении заказа ("Customer" to "Order")
Поля:
- Имя
- Фамилия
- Номер телефона
Пользователь, который занимается оформлением заказов и добавлением, изменением и удалением наименований пива
Поля:
- Имя
- Фамилия
- Номер телефона
BS-1 Как "Покупатель", я хочу получить список всех товаров, имеющихся в магазине с кратким описанием, и в результате получаю его
Request: GET /api/beers
Response: 200 OK
[
{
"id": 1,
"type": "светлое",
"inStock": true,
"name": "Лидское",
"description": "Лучшее пиво по бабушкиным рецептам",
"alcohol": 5.0,
"density": 11.5,
"country": "Республика Беларусь",
"price": 5.00
},
{
"id": 2,
"type": "темное",
"inStock": true,
"name": "Аливария",
"description": "Пиво номер 1 в Беларуси",
"alcohol": 4.6,
"density": 10.2,
"country": "Республика Беларусь",
"price": 3.00
}
]
BS-2 Как "Покупатель", я хочу получить список товаров, отфильтрованных по критерию "Тип" (темное) , и в результате получаю список наименований темного пива
Request: GET /api/beers?type=${beerType}
Где: beerType="темное"
Response: 200 OK
[
{
"id": 2,
"type": "темное",
"inStock": true,
"name": "Аливария",
"description": "Пиво номер 1 в Беларуси",
"alcohol": 4.6,
"density": 10.2,
"country": "Республика Беларусь",
"price": 3.00
}
]
BS-3 Как "Покупатель", хочу зарегистрироваться, и если пользователя с таким E-mail не найдено, регистрируюсь
Request: POST /api/users/sign-up
{
"firstName": "Иван",
"secondName": "Иванов",
"email": "ivan.ivanov@mail.ru",
"password": "123456",
"phone": "+375331234567"
}
Response: 201 CREATED
1
BS-4 Как "Покупатель", будучи зарегистрированным пользователем, я хочу войти в систему, и, если такой пользователь существует и пароль совпадает, войти в систему
Request: POST /api/sign-in
{
"email": "ivan.ivanov@mail.ru",
"password": "123456"
}
Response: 200 OK
{
token: "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGV4LmFsZXhlZXZvdkB5YW5kZXgucnUiLCJleHAiOjE1ODI2ODA3MjgsImlhdCI6MTU4MjY0NDcyOH0.oxNyf3jOPRoTuywoe2-oibyVxcisvOaPTWCaX56v9-0"
}
BS-5 Как "Покупатель", я хочу выбрать, интересующие меня наименования пива с указанием объема, и оформить заказ, и если я авторизован, оформляю заказ
Request:
POST /api/orders
Headers: Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGV4LmFsZXhlZXZvdkB5YW5kZXgucnUiLCJleHAiOjE1ODI2ODA3MjgsImlhdCI6MTU4MjY0NDcyOH0.oxNyf3jOPRoTuywoe2-oibyVxcisvOaPTWCaX56v9-0
{
"customerId": 2,
"goods": [
{
"id": 2,
"amount": 1
},
{
"id": 3,
"amount": 3
}
]
}
Response: 201 CREATED
{
"id": 2,
"customer": {
"id": 2,
"firstName": "Петр",
"secondName": "Петров",
"email": "petr.petrov@yandex.ru",
"phone": "+375337654321"
},
"processed": false,
"total": 27.0,
"canceled": false,
"customerOrder": [
{
"beer": {
"id": 2,
"type": "темное",
"inStock": true,
"name": "Аливария",
"description": "Пиво номер 1 в Беларуси",
"alcohol": 4.6,
"density": 10.2,
"country": "Республика Беларусь",
"price": 3.00
},
"amount": 1
},
{
"beer": {
"id": 3,
"type": "светлое осветлённое",
"inStock": true,
"name": "Pilsner Urquell",
"description": "непастеризованное",
"alcohol": 4.2,
"density": 12.0,
"country": "Чехия",
"price": 8.00
},
"amount": 3
}
]
}
BS-6 Как "Администратор", я хочу добавить новое наименование пива, и если такого наименования нет, добавляю его
Request: POST /api/beers
Headers: Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGV4LmFsZXhlZXZvdkB5YW5kZXgucnUiLCJleHAiOjE1ODI3NDEyMTAsImlhdCI6MTU4MjcwNTIxMH0.yfCxFB_f7U7-YTF6npRWAgZK5O_M1alWbq63gq2diuk
{
"type": "светлое осветлённое",
"inStock": true,
"name": "Pilsner Urquell",
"description": "непастеризованное",
"alcohol": 4.2,
"density": 12.0,
"country": "Чехия",
"price": 8.00
}
Response: 201 CREATED
3
BS-7 Как "Администратор", я хочу изменить цену пива, и если такое наименование есть, изменяю ему цену
Request: PUT /api/beers/${beerId}
Где: beerId=3
Headers: Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGV4LmFsZXhlZXZvdkB5YW5kZXgucnUiLCJleHAiOjE1ODI3NDEyMTAsImlhdCI6MTU4MjcwNTIxMH0.yfCxFB_f7U7-YTF6npRWAgZK5O_M1alWbq63gq2diuk
{
"id": 3,
"type": "светлое осветлённое",
"inStock": true,
"name": "Pilsner Urquell Extra",
"description": "непастеризованное",
"alcohol": 4.5,
"density": 12.2,
"country": "Чехия",
"price": 8.30
}
Response: 200 OK
{
"id": 3,
"type": "светлое осветлённое",
"inStock": false,
"name": "Pilsner Urquell Extra",
"description": "непастеризованное",
"alcohol": 4.5,
"density": 12.2,
"country": "Чехия",
"price": 8.30
}
BS-8 Как "Администратор", я хочу удалить наименование пива, и если такое наименование есть, удаляю его
Request: DELETE /api/beers/${beerId}
Где: beerId=3
Headers: Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGV4LmFsZXhlZXZvdkB5YW5kZXgucnUiLCJleHAiOjE1ODI3NDEyMTAsImlhdCI6MTU4MjcwNTIxMH0.yfCxFB_f7U7-YTF6npRWAgZK5O_M1alWbq63gq2diuk
Response: 200 OK
BS-9 Как "Администратор", хочу получить список заказов, и получаю список с информацией по каждому заказу
Request: GET /api/orders
Headers: Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGV4LmFsZXhlZXZvdkB5YW5kZXgucnUiLCJleHAiOjE1ODI3NDEyMTAsImlhdCI6MTU4MjcwNTIxMH0.yfCxFB_f7U7-YTF6npRWAgZK5O_M1alWbq63gq2diuk
Response: 200 OK
[
{
"id": 1,
"customer": {
"id": 1,
"firstName": "Иван",
"secondName": "Иванов",
"email": "ivan.ivanov@mail.ru",
"phone": "+375331234567"
},
"processed": true,
"total": 31.0,
"canceled": false,
"customerOrder": [
{
"beer": {
"id": 2,
"type": "темное",
"inStock": true,
"name": "Аливария",
"description": "Пиво номер 1 в Беларуси",
"alcohol": 4.6,
"density": 10.2,
"country": "Республика Беларусь",
"price": 3.00
},
"amount": 5
},
{
"beer": {
"id": 3,
"type": "светлое осветлённое",
"inStock": true,
"name": "Pilsner Urquell",
"description": "непастеризованное",
"alcohol": 4.2,
"density": 12.0,
"country": "Чехия",
"price": 8.00
},
"amount": 2
}
]
},
{
"id": 2,
"customer": {
"id": 2,
"firstName": "Петр",
"secondName": "Петров",
"email": "petr.petrov@yandex.ru",
"phone": "+375337654321"
},
"processed": false,
"total": 27.0,
"canceled": false,
"customerOrder": [
{
"beer": {
"id": 2,
"type": "темное",
"inStock": true,
"name": "Аливария",
"description": "Пиво номер 1 в Беларуси",
"alcohol": 4.6,
"density": 10.2,
"country": "Республика Беларусь",
"price": 3.00
},
"amount": 1
},
{
"beer": {
"id": 3,
"type": "светлое осветлённое",
"inStock": true,
"name": "Pilsner Urquell",
"description": "непастеризованное",
"alcohol": 4.2,
"density": 12.0,
"country": "Чехия",
"price": 8.00
},
"amount": 3
}
]
}
]
Request: PATCH /api/orders/${orderId}?status=${status}
Где: orderId=2, status=true
Headers: Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGV4LmFsZXhlZXZvdkB5YW5kZXgucnUiLCJleHAiOjE1ODI3NDEyMTAsImlhdCI6MTU4MjcwNTIxMH0.yfCxFB_f7U7-YTF6npRWAgZK5O_M1alWbq63gq2diuk
Response: 200 OK
2
Request: DELETE /api/orders/${orderId}
Где: orderId=2
Headers: Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGV4LmFsZXhlZXZvdkB5YW5kZXgucnUiLCJleHAiOjE1ODI3NDEyMTAsImlhdCI6MTU4MjcwNTIxMH0.yfCxFB_f7U7-YTF6npRWAgZK5O_M1alWbq63gq2diuk
Response: 200 OK
BS-12 Как "Администратор", я хочу удалить "Пользователя", и если у пользователя нет открытых заказов, удаляю
Request: DELETE /api/users/${userId}
Где: userId=2
Headers: Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGV4LmFsZXhlZXZvdkB5YW5kZXgucnUiLCJleHAiOjE1ODI3NDEyMTAsImlhdCI6MTU4MjcwNTIxMH0.yfCxFB_f7U7-YTF6npRWAgZK5O_M1alWbq63gq2diuk
Response: 200 OK
Request: PATCH /api/orders/${orderId}?canceled=${status}
Где: orderId=2, status=true
Headers: Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGV4LmFsZXhlZXZvdkB5YW5kZXgucnUiLCJleHAiOjE1ODI2ODA3MjgsImlhdCI6MTU4MjY0NDcyOH0.oxNyf3jOPRoTuywoe2-oibyVxcisvOaPTWCaX56v9-0
Response: 200 OK