Skip to content

Dyuvarov/ClansGold

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Сервис для учета транзаций золота в казне кланов

Стек:

▪️ 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 в параметре запроса получения транзакций.

API

Получение информации о клане: 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 - определяет необходимость вывода доп. информации о каждой транзации (аналогично запросу единичной записи)

Запуск

  1. Инициализация БД PostgreSQL. В директории sql расположены DDL, DML скрипты для создания структуры таблиц и первичного заполнения. Необходимо выполнить эти скрипты в порядке их нумерации.
  2. Конфигруация подключения к БД. В файле src/main/resources/db.properties указать актуальные ссылку, логин, пароль для подключения к БД.
  3. Запустить сборку. mvn package
  4. Задеплоить target/coffers.war на веб сервер. Проверено на GlassFish 6.2.5

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages