mirror of
https://github.com/valitydev/limiter-proto.git
synced 2024-11-06 00:35:18 +00:00
limitter proto first try
This commit is contained in:
parent
8da07af209
commit
a7894bfd14
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +1,4 @@
|
||||
[submodule "build_utils"]
|
||||
path = build_utils
|
||||
url = ../build_utils.git
|
||||
url = git@github.com:rbkmoney/build_utils.git
|
||||
branch = master
|
||||
|
@ -1,7 +1,156 @@
|
||||
namespace java com.rbkmoney.limiter
|
||||
namespace erlang limiter
|
||||
|
||||
include "proto/msgpack.thrift"
|
||||
include "proto/shumpune.thrift"
|
||||
include "proto/base.thrift"
|
||||
|
||||
typedef string Test
|
||||
typedef string LimitID
|
||||
typedef string PlanID
|
||||
typedef i64 BatchID
|
||||
typedef i64 AccountID
|
||||
typedef string LimitRef
|
||||
typedef i64 DomainRevision
|
||||
|
||||
typedef shumpune.Clock Clock
|
||||
typedef shumpune.Balance Balance
|
||||
typedef base.InvalidRequest InvalidRequest
|
||||
|
||||
enum LimitType {
|
||||
cash
|
||||
count
|
||||
}
|
||||
|
||||
struct Sublimit {
|
||||
1: required AccountID account_id
|
||||
2: required LimitTimeRange time_range
|
||||
}
|
||||
|
||||
/**
|
||||
* Структура данных, описывающая свойства счета:
|
||||
* id -идентификатор машины лимита
|
||||
* ref - идентификатор лимита в domain конфигурации
|
||||
* domain_revision - ревизия конфигурации
|
||||
* type - тип лимита
|
||||
* sublimits - сублимиты лимита
|
||||
* description - описание (неизменяемо после создания лимита)
|
||||
*/
|
||||
struct Limit {
|
||||
1: required LimitID id
|
||||
2: required LimitRef ref
|
||||
3: required DomainRevision domain_revision
|
||||
4: required LimitType type
|
||||
5: required list<Sublimit> sublimits
|
||||
6: optional string description
|
||||
}
|
||||
|
||||
/**
|
||||
* Описывает одно изменение лимита в системе, может быть следующих типов:
|
||||
* cash - изменение валютного лимита
|
||||
* count - изменение счетного лимита
|
||||
*/
|
||||
|
||||
union LimitUnit {
|
||||
1: LimitUnitCash cash
|
||||
2: LimitUnitCount count
|
||||
}
|
||||
|
||||
struct LimitUnitCash {
|
||||
1: required base.Amount amount
|
||||
2: required base.CurrencySymbolicCode currency_sym_code
|
||||
}
|
||||
|
||||
struct LimitUnitCount {
|
||||
1: required base.Amount amount
|
||||
}
|
||||
|
||||
/**
|
||||
* Описывает батч - набор изменений лимита, служит единицей атомарности операций в системе:
|
||||
* id - идентификатор набора, уникален в пределах плана
|
||||
* units - набор изменений лимита
|
||||
*/
|
||||
struct LimitBatch {
|
||||
1: required BatchID id
|
||||
2: required list<LimitUnit> units
|
||||
}
|
||||
|
||||
/**
|
||||
* План состоит из набора батчей, который можно пополнить, подтвердить или отменить:
|
||||
* id - идентификатор плана, уникален в рамках системы
|
||||
* batch_list - набор батчей, связанный с данным планом
|
||||
*/
|
||||
struct LimitPlan {
|
||||
1: required PlanID id
|
||||
2: required list<LimitBatch> batch_list
|
||||
}
|
||||
|
||||
/**
|
||||
* Описывает параметры создания лимита:
|
||||
* ref - идентификатор лимита в domain конфигурации
|
||||
* domain_revision - ревизия конфигурации
|
||||
* create_time - время старта нового временного интервала лимита
|
||||
*/
|
||||
struct LimitCreateParams {
|
||||
1: required LimitRef ref
|
||||
2: required DomainRevision domain_revision
|
||||
3: required base.Timestamp create_time
|
||||
}
|
||||
|
||||
/**
|
||||
* Описывает единицу изменения плана:
|
||||
* id - id плана, к которому применяется данное изменение
|
||||
* batch - набор изменений, который нужно добавить в план
|
||||
* create_params - если такого лимита нет или срок дейтсвия сублимита истек, то эти параметры
|
||||
* будут использованы чтобы проинициализировать новый лимит/сублимит.
|
||||
Так как мы не знаем существует ли лимит, то всегда прикладываем эти параметры.
|
||||
*/
|
||||
struct LimitPlanChange {
|
||||
1: required PlanID id
|
||||
2: required LimitBatch batch
|
||||
3: required LimitCreateParams create_params
|
||||
}
|
||||
|
||||
/**
|
||||
* Описывает время действия лимита:
|
||||
* start_time - начало действия лимита
|
||||
* end_time - конец, если не бесконечно
|
||||
*/
|
||||
struct LimitTimeRange {
|
||||
1: required base.Timestamp start_time
|
||||
2: optional base.Timestamp end_time
|
||||
}
|
||||
|
||||
/**
|
||||
* Описывает точку во времени жизни лимита:
|
||||
* clock - clock состояния счета аккаунта, привязанного к сублимиту
|
||||
* time_range - время действия сублимита, чтобы можно было его найти в лимите
|
||||
*/
|
||||
struct LimitClock {
|
||||
1: required Clock clock
|
||||
2: required LimitTimeRange time_range
|
||||
}
|
||||
|
||||
exception LimitNotFound {
|
||||
1: required LimitID limit_id
|
||||
}
|
||||
|
||||
exception PlanNotFound {
|
||||
1: required PlanID plan_id
|
||||
}
|
||||
|
||||
/**
|
||||
* Возникает в случае, если переданы некорректные параметры в одном или нескольких изменениях лимита
|
||||
*/
|
||||
exception InvalidLimitParams {
|
||||
1: required map<LimitUnit, string> wrong_limits
|
||||
}
|
||||
|
||||
exception ClockInFuture {}
|
||||
|
||||
service Accounter {
|
||||
LimitClock Hold(1: LimitPlanChange plan_change) throws (1: InvalidLimitParams e1, 2: base.InvalidRequest e2)
|
||||
LimitClock CommitPlan(1: LimitPlan plan) throws (1: InvalidLimitParams e1, 2: base.InvalidRequest e2)
|
||||
LimitClock RollbackPlan(1: LimitPlan plan) throws (1: InvalidLimitParams e1, 2: base.InvalidRequest e2)
|
||||
LimitPlan GetPlan(1: PlanID id) throws (1: PlanNotFound e1)
|
||||
Limit GetLimitByID(1: LimitID id) throws (1:LimitNotFound e1)
|
||||
Balance GetBalanceByID(1: LimitID id, 2: LimitClock clock) throws (1:LimitNotFound e1, 2: ClockInFuture e2)
|
||||
}
|
||||
|
@ -29,6 +29,10 @@
|
||||
{msgpack_proto,
|
||||
{git, "git@github.com:rbkmoney/msgpack-proto.git",
|
||||
{branch, "master"}}
|
||||
},
|
||||
{shumpune_proto,
|
||||
{git, "git@github.com:rbkmoney/shumpune-proto.git",
|
||||
{branch, "master"}}
|
||||
}
|
||||
]}.
|
||||
|
||||
|
8
rebar.lock
Normal file
8
rebar.lock
Normal file
@ -0,0 +1,8 @@
|
||||
[{<<"msgpack_proto">>,
|
||||
{git,"git@github.com:rbkmoney/msgpack-proto.git",
|
||||
{ref,"b558b0d9a91f2130e241bd186db171aee3e81e36"}},
|
||||
0},
|
||||
{<<"shumpune_proto">>,
|
||||
{git,"git@github.com:rbkmoney/shumpune-proto.git",
|
||||
{ref,"4c87f03591cae3dad41504eb463d962af536b1ab"}},
|
||||
0}].
|
Loading…
Reference in New Issue
Block a user