user-balance-service

module
v0.0.0-...-0fb1e89 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 17, 2022 License: MIT

README

Balance REST API

Описание

Микросервис для работы с балансом пользователей (зачисление средств, списание средств, перевод средств от пользователя к пользователю, а также метод получения баланса пользователя). Сервис должен предоставлять HTTP API и принимать/отдавать запросы/ответы в формате JSON.

Запуск

Клонирование репозитория

$ git clone https://github.com/Matster07/user-balance-service.git

Переход в каталог для запуска docker-compose

$ cd user-balance-service/deployments

Запуск docker-compose

$ docker-compose up -d

БД

Таблицы и все необходимые связи создаются при первом запуске из файла init.sql

Структура: accounts(id, balance, account_type) - используется для работы с балансом счета orders(id, service_id, price, user_account_id, status, creation_date) - хранит информациию о статусах обработок транзакций заказов. services(id, service_name, account_id) - тип оказываемой услуги. Каждая услуга имеет свой счет для резервации. transactions(id, type, amount, sender_id, receiver_id, creation_date, comment) - история всех типов операций со счетами.

API

  • В корне проекта лежит POSTMAN коллекция с желательной последовательностью запросов и подготовленными телами
  • Swagger - http://localhost:9090/swagger/index.html
Пояснения к endpoint
  1. Метод начисления средств на баланс:
  • Method: POST

  • Path: /api/v1/account/deposit

  • Request body:

    account_id - (uint) идентификатор счета

    amount - (uint) сумма пополнения

  • Description: при отсутствии счета с указанным идентификатором, создается и пополняется новый

  1. Метод резервирования средств с основного баланса на отдельном счете:
  • Method: POST

  • Path: /api/v1/account/reserve

  • Request body:

    user_account_id - (uint) идентификатор счета

    service_id - (uint) идентификатор услуги

    order_id - (uint) идентификатор заказа

    price - (float) стоимость

  • Description: выполняет резервацию средств клиента, создает запись со статусом обработки транзакции заказа.

  1. Метод признания выручки
  • Method: async(Kafka)

  • Request body:

    user_account_id - (uint) идентификатор счета

    service_id - (uint) идентификатор услуги

    order_id - (uint) идентификатор заказа

    price - (float) стоимость

    status - (string) статус исполнения заказа от стороннего сервиса

  • Description: асинхронное взаимодействие. Подписываемся на изменение статуса обработки заказа от сервиса deliver-service(запускается в docker-compose). Если приходит заказ со статусом "COMPLETED" - переводим статус заказа в "COMPLETED", зарезервированные средства переводим на счет с прибылью компании, сохраняем перевод в историю транзакций со статусом "PROFIT". В случае любого другого статуса заказа - переводим статус заказа в "CANCELLED", зарезервированные средства возвращаем на счет пользователя, сохраняем перевод в историю транзакций со статусом "REFUND". Для имитации ответа необходимо выполнить запрос "4"

  1. Метод для отправки статуса заказа в очередь:
  • Method: POST

  • Path: http://localhost:9091/api/v1/orders/process

  • Request body:

    user_account_id - (uint) идентификатор счета

    service_id - (uint) идентификатор услуги

    order_id - (uint) идентификатор заказа

    price - (float) стоимость

    status - (string) статус исполнения заказа от стороннего сервиса

  • Description: отправка в очередь. Для успешной обработки заказа нужно, чтобы status = "COMPLETED". Все остальные статусы будут обрабатываться, но считаться неуспешными.

  1. Метод получения баланса пользователя:
  • Method: GET

  • Path: /api/v1/accounts/{account_id}/balance

  • Query:

    account_id - (uint) идентификатор счета

  • Description: переводит зарезервированную сумму на отдельный счет, создает запись с запонанием статуса обработки заказа, добавляет перевод в историю.

  1. Метод для получения месячного отчета:
  • Method: GET

  • Path: /api/v1/report/service/profit

  • Query:

    year - (uint) год

    month - (uint) месяц

  • Description: Создает отчет по прибыли в разрезе всех категорий услуг по всем пользователям за выбранный период. Файл сохраняется в каталоге reports/ в корне проекта. В ответе возвращается статус, а не ссылка. Это сделано для удоства проверки, чтобы не передавать через env в image абсолютный путь к проекту.

  1. Метод получения списка транзакций с комментариями откуда и зачем были начислены/списаны средства с баланса:
  • Method: GET

  • Path: /api/v1/accounts/1/transactions

  • Query:

    date_sort - (asc/desc/нету значения) сортировка по дате

    amount_sort - (asc/desc/нету значения) сортировка по сумме

    page - (uint) - порядковый номер

  • Description: размер элементов в одной странице - 9. Сортировка по дате и сумме - возрастающее/убывающее/нету. Значения выбираются из transactions для указанного счета

  1. Перевод средств:
  • Method: POST

  • Path: /api/v1/account/transfer

  • Request body:

    from - (uint) от кого

    amount - (float) сумма перевода

    to - (uint) кому

  • Description: списывает деньги со счета одного, прибавляет другому. Добавляет перевод в историю транзакций со типом "TRANSFER". Счет аккаунта получателя должен быть создан заранее депозитом на любую сумму.

  1. Вывод средств:
  • Method: POST

  • Path: /api/v1/account/withdraw

  • Request body:

    from - (uint) кто снимает

    amount - (float) сумма перевода

  • Description: списывает деньги с указанного счета. Добавляет перевод в историю транзакций со типом "WITHDRAWAL"

Directories

Path Synopsis
cmd
Package docs GENERATED BY SWAG; DO NOT EDIT This file was generated by swaggo/swag
Package docs GENERATED BY SWAG; DO NOT EDIT This file was generated by swaggo/swag
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
JackTT - Gopher 🇻🇳