damsel/proto/accounter.thrift
Vladimir Pankrashkin 815f75e0e5 SHMW-10: accounter interface changes (#85)
* SHMW-10: accounter interface changes

* SHMW-10:  review fixes
2016-11-16 12:36:31 +03:00

122 lines
5.8 KiB
Thrift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

include 'base.thrift'
include 'domain.thrift'
namespace java com.rbkmoney.damsel.accounter
namespace erlang accounter
typedef base.ID PlanID
typedef i64 BatchID
typedef i64 AccountID
/**
* Данные, необходимые для создания счета:
* currency_sym_code - символьный код валюты
* description - описание
*/
struct AccountPrototype {
1: required domain.CurrencySymbolicCode currency_sym_code
2: optional string description
}
/**
* Структура данных, описывающая свойства счета:
* id - номер сета (генерируется аккаунтером)
* own_amount - собственные средства (объём средств на счёте с учётом только подтвержденных операций)
* max_available_amount - максимально возможные доступные средства
* min_available_amount - минимально возможные доступные средства
* Где минимально возможные доступные средства - это объем средств с учетом подтвержденных и не подтвержденных
* операций в определённый момент времени в предположении, что все планы с батчами, где баланс этого счёта изменяется в
* отрицательную сторону, подтверждены, а планы, где баланс изменяется в положительную сторону,
* соответственно, отменены.
* Для максимального значения действует обратное условие.
* currency_sym_code - символьный код валюты (неизменяем после создания счета)
* description - описания (неизменяемо после создания счета)
*
*У каждого счёта должна быть сериализованная история, то есть наблюдаемая любым клиентом в определённый момент времени
* последовательность событий в истории счёта должна быть идентична.
*/
struct Account {
1: required AccountID id
2: required domain.Amount own_amount
3: required domain.Amount max_available_amount
4: required domain.Amount min_available_amount
5: required domain.CurrencySymbolicCode currency_sym_code
6: optional string description
}
/**
* Описывает одну проводку в системе (перевод спедств с одного счета на другой):
* from_id - id счета, с которого производится списание
* to_id - id счета, на который производится зачисление
* amount - объем переводимых средств (не может быть отрицательным)
* currency_sym_code - код валюты, должен совпадать с кодами задействованных счетов
* description - описание проводки
*/
struct Posting {
1: required AccountID from_id
2: required AccountID to_id
3: required domain.Amount amount
4: required domain.CurrencySymbolicCode currency_sym_code
5: required string description
}
/**
* Описывает батч - набор проводок, служит единицей атомарности операций в системе:
* id - идентификатор набора, уникален в пределах плана
* postings - набор проводок
*/
struct PostingBatch {
1: required BatchID id
2: required list<Posting> postings
}
/**
* План проводок, состоит из набора батчей, который можно пополнить, подтвердить или отменить:
* id - идентификатор плана, уникален в рамках системы
* batch_list - набор батчей, связанный с данныс планом
*/
struct PostingPlan {
1: required PlanID id
2: required list<PostingBatch> batch_list
}
/**
* Описывает единицу пополнения плана:
* id - id плана, к которому применяется данное изменение
* batch - набор проводок, который нужно добавить в план
*/
struct PostingPlanChange {
1: required PlanID id
2: required PostingBatch batch
}
/**
* Результат применение единицы пополнения плана:
* affected_accounts - новое состояние задействованных счетов
*/
struct PostingPlanLog {
2: required map<AccountID, Account> affected_accounts
}
exception AccountNotFound {
1: required AccountID account_id
}
exception PlanNotFound {
1: required PlanID plan_id
}
/**
* Возникает в случае, если переданы некорректные параметры в одной или нескольких проводках
*/
exception InvalidPostingParams {
1: required map<Posting, string> wrong_postings
}
service Accounter {
PostingPlanLog Hold(1: PostingPlanChange plan_change) throws (1:InvalidPostingParams e1, 2:base.InvalidRequest e2)
PostingPlanLog CommitPlan(1: PostingPlan plan) throws (1:InvalidPostingParams e1, 2:base.InvalidRequest e2)
PostingPlanLog RollbackPlan(1: PostingPlan plan) throws (1:InvalidPostingParams e1, 2:base.InvalidRequest e2)
PostingPlan GetPlan(1: PlanID id) throws (1: PlanNotFound e1)
Account GetAccountByID(1: AccountID id) throws (1:AccountNotFound ex)
AccountID CreateAccount(1: AccountPrototype prototype)
}