Запуск:
docker-compose up --build
Тестирование:
./gradlew test
Подключил jacoco для репорта покрытия тестами. Сам отчет будет лежать в build/jacocoHtml/index.html
-
URL:
/seller
-
Метод:
GET
-
Описание: Возвращает всех продавцов
-
Response:
- Status:
200 OK
- Status:
-
Пример:
/seller
- response:
[ { "id": 1, "name": "Alberto Mayert", "contactInfo": "878-999-0161", "registrationDate": "2022-10-22T14:30:00" }, { "id": 2, "name": "Elmer Runte", "contactInfo": "645-423-7550", "registrationDate": "2024-09-03T09:45:00" } ]
-
URL:
/seller/{id}
-
Параметры запроса
- (необязательно)
transactions
типboolean
, если активен, то возвращает список транзакций продавца вместе с его информацией
- (необязательно)
-
Метод:
GET
-
Описание: Возвращает информацию о продавце по его id. Если передать в параметрах transactions=true, то вернет еще и список его транзакций. Если такого продавца нет, то вернет 404.
-
Responses:
- Status:
200 OK
- Status:
404 NOT FOUND
- Status:
-
Пример:
/seller/12?transactions=true
- response:
{ "id": 9, "name": "Betty Padberg", "contactInfo": "802-395-7310", "registrationDate": "2024-10-20T15:52:09.227133", "transactions": [ { "id": 13, "amount": 156.07, "paymentType": "TRANSFER", "transactionDate": "2024-10-20T17:09:55.822576", "sellerId": 9 }, { "id": 14, "amount": 919.07, "paymentType": "TRANSFER", "transactionDate": "2024-10-20T17:09:56.685443", "sellerId": 9 } ] }
-
URL:
/seller
-
Тело запроса
name
типString
- (необязательно)
contactInfo
типString
-
Метод:
POST
-
Responses:
- Status:
201 CREATED
- Status:
-
Пример:
- URL:
/seller
- request:
{ "name": "Darin Gottlieb", "contactInfo": "885-796-3985" }
- response:
{ "id": 11, "name": "Darin Gottlieb", "contactInfo": "885-796-3985", "registrationDate": "2024-10-20T17:16:48.9827674" }
- URL:
-
URL:
/seller/{id}
-
Тело запроса
- (необязательно)
name
типString
- (необязательно)
contactInfo
типString
- (необязательно)
-
Метод:
PUT
-
Описание: Обновляет информацию о продавца. Если какое-то поле не пустое, то продавцу присвоят это поле.
-
Responses:
- Status:
200 OK
- Status:
404 NOT FOUND
- Status:
-
Пример:
/seller/1
- request:
{
"contactInfo": "885-796-3985"
}
-
URL:
/seller/{id}
-
Метод:
DELETE
-
Описание: Удаляет продавца по переданному id. Если такого продавца нет то в ответе код 404.
-
Responses:
- Status:
204 NO CONTENT
- Status:
404 NOT FOUND
- Status:
-
URL:
/seller/most-productive
-
Параметры запроса
period
:DAY,MONTH,QUARTER,YEAR
-
Метод:
GET
-
Описание: Возвращает самого продуктивного продавца,тот у которого сумма всех транзакции больше всех в рамках выбранного периода.
-
Responses:
- Status:
200 OK
- Status:
404 NOT FOUND
- Status:
-
Пример:
/seller/most-productive?period=year
- response:
{ "id": 9, "name": "Betty Padberg", "contactInfo": "802-395-7310", "registrationDate": "2024-10-20T15:52:09.227133" }
-
URL:
/seller/best-period/{id}
-
Метод:
GET
-
Описание: Возвращает начало и конец периода с точностью до дня(!), в котором продавец имел больше всего транзакций. На самом деле реализовано с асимптотикой O(N^2), где N - количество транзакций у данного продавца, по-моему можно оптимизировать, не хватило времени. Наилучший период выбирается через оценочную функцию на основе двух аргументов - количество дней в периоде и количество транзакций в этом периоде. Формула оценочной функции:
countOfTransaction^2/lengthOfPeriod
. -
Responses:
- Status:
200 OK
- Status:
404 NOT FOUND
- Status:
-
Пример:
/seller/best-period/5
- response:
{ "first": "2024-09-09", "last": "2024-09-10", "count": 3 }
-
URL:
seller/less-then-summa
-
Параметры запроса
dateFrom
:yyyy-mm-dd
dateTo
:yyyy-mm-dd
summa
:double
- пример : 100.5
-
Метод:
GET
-
Описание: Возвращает список продавцов, у которых сумма всех транзакции за выбранный период меньше переданного параметра суммы
-
Responses:
- Status:
200 OK
- Status:
-
Пример:
/seller/less-then-summa?dateFrom=2024-10-24&dateTo=2025-10-23&summa=87.12
- response:
[ { "id": 2, "name": "Elmer Runte", "contactInfo": "645-423-7550", "registrationDate": "2024-09-03T09:45:00" }, { "id": 3, "name": "Christina Zieme", "contactInfo": "921-270-2943", "registrationDate": "2024-10-19T12:00:00" } ]
- URL:
/transaction
- Метод:
GET
- Response:
- Status:
200 OK
- Status:
- Пример:
/transaction
- response:
[ { "id": 4, "amount": 12.53, "paymentType": "CARD", "transactionDate": "2024-09-03T10:00:00", "sellerId": 2 }, { "id": 5, "amount": 52.78, "paymentType": "CASH", "transactionDate": "2024-09-03T11:00:00", "sellerId": 2 } ]
- URL:
/transaction/{id}
- Метод:
GET
- Responses:
- Status:
200 OK
- Status:
404 NOT FOUND
- Status:
- Пример:
/transaction/3
- response:
{ "id": 3, "amount": 325.51, "paymentType": "TRANSFER", "transactionDate": "2024-10-16T14:45:00", "sellerId": 1 }
- URL:
/transaction
- Тело запроса
sellerId
типint
amount
типint
paymentType
типstring
- Метод:
POST
- Responses:
- Status:
201 CREATED
- Status:
- Пример:
/transaction
- Request:
{ "sellerId" : 9, "amount": 889.46, "paymentType": "CASH" }
- Response:
{ "id": 19, "amount": 889.46, "paymentType": "CASH", "transactionDate": "2024-10-20T17:43:22.4469899", "sellerId": 9 }
- Request: