damsel/proto/domain.thrift
Andrew Mayorov 643996f8da HG-36: Preliminary EventSink service + slight event model redesign (#22)
* HG-36: Preliminary EventSink service + slight event model redesign

* HG-36: Add Java namespace

* HG-36: Convert EventSource into a union

* HG-36: Dedicated exception for GetLastEventID

* HG-36: Add doc + event payload type hierarchy

* HG-36: Fix tag ordering

* HG-36: Make exceptional conditions clearer

* HG-36: Rename ev -> payload

* HG-36: Change status types to unions + proper namespacing
2016-06-16 18:07:06 +03:00

378 lines
8.7 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"
namespace java com.rbkmoney.damsel.domain
namespace erlang domain
typedef i32 SchemaRevision
typedef i64 DataRevision
const SchemaRevision SCHEMA_REVISION = 42
typedef i32 ObjectID
/* Common */
// В идеале надо использовать `typedef` над `base.Error`, но сейчас это приводит к ошибкам кодогенератора Go
struct OperationError {
/** Уникальный признак ошибки, пригодный для обработки машиной */
1: required string code;
/** Описание ошибки, пригодное для восприятия человеком */
2: optional string description;
}
/** Сумма в минимальных денежных единицах. */
typedef i64 Amount
/** Валюта. */
struct Currency {
1: required string name
2: required string symbolic_code
3: required i16 numeric_code
4: required i16 exponent
}
struct CurrencyRef { 1: required string symbolic_code }
struct CurrencyObject {
1: required CurrencyRef ref
2: required Currency data
}
/** Денежные средства, состоящий из суммы и валюты. */
struct Funds {
1: required Amount amount
2: required Currency currency
}
/* Contractor transactions */
struct TransactionInfo {
1: required string id
2: optional base.Timestamp timestamp
3: required base.StringMap extra = []
}
/* Invoices */
typedef base.ID InvoiceID
typedef base.ID InvoicePaymentID
typedef binary InvoiceContext
typedef string PaymentSession
struct Invoice {
1: required InvoiceID id
2: required base.Timestamp created_at
3: required DataRevision domain_revision
4: required InvoiceStatus status
5: required base.Timestamp due
6: required string product
7: optional string description
8: required Funds cost
9: required InvoiceContext context
}
struct InvoiceUnpaid {}
struct InvoicePaid {}
struct InvoiceCancelled { 1: required string details }
struct InvoiceFulfilled { 1: required string details }
union InvoiceStatus {
1: InvoiceUnpaid unpaid
2: InvoicePaid paid
3: InvoiceCancelled cancelled
4: InvoiceFulfilled fulfilled
}
struct InvoicePayment {
1: required InvoicePaymentID id
2: required base.Timestamp created_at
3: required InvoicePaymentStatus status
4: optional TransactionInfo trx
5: required Payer payer
6: required PaymentTool payment_tool
7: required PaymentSession session
}
struct InvoicePaymentPending {}
struct InvoicePaymentSucceeded {}
struct InvoicePaymentFailed { 1: OperationError err }
union InvoicePaymentStatus {
1: InvoicePaymentPending pending
2: InvoicePaymentSucceeded succeeded
3: InvoicePaymentFailed failed
}
struct Payer {}
/* Cash flows */
/** Распределение денежных потоков в системе. */
struct CashDistribution {
1: required string name
2: required string description = ""
3: required list<CashFlow> flows
}
/** Участник распределения денежных потоков. */
// Порядок следования `typedef`-`struct` важен для кодогенератора Go
typedef string CashFlowNode // FIXME: too broad
/** Денежный поток между двумя участниками. */
struct CashFlow {
1: required CashFlowNode source
2: required CashFlowNode destination
3: required CashVolume volume
}
/** Объём денежного потока. */
union CashVolume {
1: VolumeFixed fixed
2: VolumeShare share
}
/** Объём в абсолютных денежных единицах. */
struct VolumeFixed {
1: required Amount amount
}
/** Объём в относительных единицах. */
struct VolumeShare {
1: required base.Rational parts
2: optional CashFlowNode of
}
struct CashDistributionRef { 1: required ObjectID id }
struct CashDistributionObject {
1: required CashDistributionRef ref
2: required CashDistribution data
}
/* Merchants */
/** Мерчант. */
struct Merchant {
1: optional Contract contract
2: required list<Shop> shops = []
}
struct MerchantRef { 1: required base.ID id }
struct MerchantObject {
1: required MerchantRef ref
2: required Merchant data
}
/* Contracts */
/** Договор с юридическим лицом, в частности с мерчантом. */
struct Contract {
1: required string number
2: required base.Timestamp signed_at
3: required PartyRef party
4: required BankAccount account
5: required list<ContractTerm> terms
}
/** Лицо, выступающее стороной договора. */
struct Party {
1: required string registered_name
2: required LegalEntity legal_entity
}
/** Форма юридического лица. */
union LegalEntity {
}
struct PartyRef { 1: required ObjectID id }
struct PartyObject {
1: required PartyRef ref
2: required Party data
}
/** Банковский счёт. */
struct BankAccount {
}
/** Условие договора. */
union ContractTerm {
1: CashDistributionTerm cash_distribution
}
struct CashDistributionTerm {
}
/* Shops */
/** Магазин мерчанта. */
struct Shop {
1: required string name
2: optional string url
3: required Category category
}
/* Categories */
/** Категория продаваемых товаров или услуг. */
struct Category {
1: required string name
2: required string description = ""
}
struct CategoryRef { 1: required ObjectID id }
struct CategoryObject {
1: required CategoryRef ref
2: required Category data
}
/* Payment methods */
enum PaymentMethod {
bank_card = 1 // payment_card?
}
union PaymentTool {
1: BankCard bank_card
}
typedef string Token
struct BankCard {
1: required Token token
2: required BankCardPaymentSystem payment_system
3: required string bin
4: required string masked_pan
}
enum BankCardPaymentSystem {
visa
mastercard
}
/** Способ платежа, категория платёжного средства. */
struct PaymentMethodDefinition {
1: required string name
2: required string description = ""
}
struct PaymentMethodRef { 1: required PaymentMethod id }
struct PaymentMethodObject {
1: required PaymentMethodRef ref
2: required PaymentMethodDefinition data
}
/* Conditions */
/** Условие применимости. */
struct Condition {
1: required string name
2: required string description = ""
3: required ConditionDef definition
}
/** Варианты условий применимости. */
union ConditionDef {
/// basis and combinators
1: bool value_is
2: set<ConditionDef> all_of
3: set<ConditionDef> one_of
4: ConditionDef is_not
/// primitives
5: ConditionRef condition_is
6: CategoryRef category_is
7: PaymentMethodRef payment_method_is
8: FlowRef flow_is
}
struct ConditionRef { 1: required ObjectID id }
struct ConditionObject {
1: required ConditionRef ref
2: required Condition data
}
/* Flows */
/** Операция над бизнес-объектом, в частности инвойсом. */
struct Flow {
1: required string name
2: required string description = ""
}
struct FlowRef { 1: required ObjectID id }
struct FlowObject {
1: required FlowRef ref
2: required Flow data
}
/* Proxies */
typedef base.StringMap ProxyOptions
enum ProxyType {
provider
}
struct Proxy {
1: required ProxyType type
2: required string url
3: optional ProxyOptions options
}
struct ProxyRef { 1: required ObjectID id }
struct ProxyObject {
1: required ProxyRef ref
2: required ProxyObject object
}
/* Merchant prototype */
struct MerchantPrototypeRef {}
/** Прототип мерчанта по умолчанию. */
struct MerchantPrototype {
1: required MerchantPrototypeRef ref
2: required Merchant data
}
/* Type enumerations */
union Reference {
1: CategoryRef category
2: PaymentMethodRef payment_method
3: FlowRef flow
4: CurrencyRef currency
5: ConditionRef condition
6: CashDistributionRef cash_distribution
7: PartyRef party
8: MerchantPrototypeRef merchant_prototype
9: ProxyRef proxy
}
union DomainObject {
1: CategoryObject category
2: PaymentMethodObject payment_method
3: FlowObject flow
4: CurrencyObject currency
5: ConditionObject condition
6: CashDistributionObject cash_distribution
7: PartyObject party
8: MerchantPrototype merchant_prototype
9: ProxyObject proxy
}
/* Domain */
typedef map<Reference, DomainObject> Domain