▪️ Java 11
▪️ Jakarta EE 9
▪️ PostgreSQL
▪️ Glassfish
Сервис предоставляет API для увеличения/уменьшения золота в казне клана и просмотра информации о выполненных транзакциях.
Для реализации REST использована jakartaee, взаимодействие с БД через JDBC без использования фреймворков (требование к задаче).
Реализованы 2 способа пополнения казны:
- Пополнение пользователем
- Пополнение за выполненное задание
В архитектуре учетна возможность добавления новых способов пополнения так, чтобы достаточно было описать только сервис новго способа без изменения уже созданного ранее кода или структуры таблиц БД.
Предусмотрен вызов различных способов пополнения одновременно в нескольких потоках.
О каждом действии с казной формируется запись транзацкии, которая имеет следующую структуру:
{
"action":"TASK", // Действие, которое породило транзацию (TASK - выполнение задания)
"clanId":3, // Идентификатор клана
"date":"2022-10-06T19:42:53.121488", // Момент времени создания транзакции
"goldBefore":4425, // Количество золота в казне клана до выполнения транзации
"goldChange":1, // Сумма добавляемого/убавляемого золота
"id":11243, // Идентификатор транзации
"status":"FAILED" // Статус выполнения транзакции (ACCEPTED - выполнена, FAILED - не выполнена)
"errorDescription":"blablabla" // Описание ошибки для FAILED транзацкий
}
FAILED транзакции не изменяют количество золота в казне и носят только информационный характер.
Кроме записи о транзакции, для каждого способа пополнения казны в отдельную таблицу записывается дополнительная информация, свойственная только для конкретного способа пополнения. Эту информацию можно получить передав detailed=true в параметре запроса получения транзакций.
Получение информации о клане: GET /coffers/api/{clanId}
Пополнение казны пользователем: POST /coffers/api/useraddgold?userId={userId}&clanId={clanId}&gold={gold}
Пополнение казны за выполнение задания: POST /coffers/api/task/complete?clanId={clanId}&taskId={taskId}
Получение информации о транзанзакции: /coffers/api/transaction/{id}?detailed={true/false}
Если флаг detailed = true, то помимо основной информации о тразакции, ответ будет содержать дополнительную информацию: userId, если это транзакция поплнения казны пользователем или taskId, если это транзация пополнения казны за выполненное задание
Получение постраничного списка транзаций, отсортированного по дате в порядке убывания: /coffers/api/transaction&pageNumber={pageNumber}?pageSize={pageSize}?detailed={true/false}
pageNumber - номер страницы, pageSize - размер страницы, detailed - определяет необходимость вывода доп. информации о каждой транзации (аналогично запросу единичной записи)
- Инициализация БД PostgreSQL. В директории sql расположены DDL, DML скрипты для создания структуры таблиц и первичного заполнения. Необходимо выполнить эти скрипты в порядке их нумерации.
- Конфигруация подключения к БД. В файле src/main/resources/db.properties указать актуальные ссылку, логин, пароль для подключения к БД.
- Запустить сборку. mvn package
- Задеплоить target/coffers.war на веб сервер. Проверено на GlassFish 6.2.5