mirror of
https://github.com/valitydev/damsel.git
synced 2024-11-06 17:55:23 +00:00
6c96a4d67b
* Withdrawal provider: added optional trx info
262 lines
9.1 KiB
Thrift
262 lines
9.1 KiB
Thrift
include "base.thrift"
|
||
include "msgpack.thrift"
|
||
include "domain.thrift"
|
||
include "withdrawals_domain.thrift"
|
||
|
||
namespace java com.rbkmoney.damsel.withdrawals.provider_adapter
|
||
namespace erlang wthadpt
|
||
|
||
typedef domain.Failure Failure
|
||
|
||
/**
|
||
* Adapter options.
|
||
*/
|
||
typedef domain.ProxyOptions Options
|
||
|
||
/**
|
||
* Непрозрачное для процессинга состояние адаптера, связанное с определённой сессией взаимодействия с
|
||
* третьей стороной.
|
||
*/
|
||
typedef msgpack.Value InternalState
|
||
|
||
/**
|
||
* Непрозрачные для процессинга данные котировки, связанные с особенностями взаимодействия с
|
||
* третьей стороной.
|
||
*/
|
||
typedef msgpack.Value QuoteData
|
||
|
||
/**
|
||
* Запрос/ответ адаптера при обработке обратного вызова в рамках сессии.
|
||
*/
|
||
typedef base.Opaque CallbackPayload
|
||
typedef base.Opaque CallbackResponsePayload
|
||
|
||
typedef base.Tag CallbackTag
|
||
|
||
/**
|
||
* Требование адаптера к процессингу, отражающее дальнейший прогресс сессии взаимодействия с третьей
|
||
* стороной.
|
||
*/
|
||
union Intent {
|
||
1: FinishIntent finish
|
||
2: SleepIntent sleep
|
||
}
|
||
|
||
/**
|
||
* Требование завершить сессию взаимодействия с третьей стороной.
|
||
*/
|
||
struct FinishIntent {
|
||
1: required FinishStatus status
|
||
}
|
||
|
||
/**
|
||
* Статус, c которым завершилась сессия взаимодействия с третьей стороной.
|
||
*/
|
||
union FinishStatus {
|
||
/** Успешное завершение взаимодействия. */
|
||
1: Success success
|
||
/** Неуспешное завершение взаимодействия с пояснением возникшей проблемы. */
|
||
2: Failure failure
|
||
}
|
||
|
||
struct Success {
|
||
1: optional domain.TransactionInfo trx_info
|
||
}
|
||
|
||
/**
|
||
* Требование прервать на определённое время сессию взаимодействия, с намерением продолжить её потом.
|
||
*/
|
||
struct SleepIntent {
|
||
/** Таймер, определяющий когда следует продолжить взаимодействие. */
|
||
1: required base.Timer timer
|
||
|
||
/**
|
||
* Идентификатор, по которому обработчик обратного запроса сможет идентифицировать сессию
|
||
* взаимодействия с третьей стороной, чтобы продолжить по ней взаимодействие.
|
||
* Единожды указанный, продолжает действовать до успешной обработки обратного
|
||
* запроса или завершения сессии.
|
||
* Должен быть уникальным среди всех сессий такого типа.
|
||
* Один и тот же идентификатор можно устанавливать для одной и той же сессии до тех пор, пока
|
||
* обратный вызов с таким идентификатором не будет успешно обработан. Попытка установить уже
|
||
* обработанный идентификатор приведет к ошибке.
|
||
*/
|
||
2: optional CallbackTag callback_tag
|
||
}
|
||
|
||
///
|
||
|
||
/**
|
||
* Данные вывода, необходимые для обращения к провайдеру.
|
||
*/
|
||
struct Withdrawal {
|
||
// Поле id не является уникальным, может совпадать, в случае роутинга
|
||
// выплаты между провайдерами. Если нужна уникальность, используйте
|
||
// session_id
|
||
1: required base.ID id
|
||
7: optional base.ID session_id
|
||
2: required Cash body
|
||
3: required Destination destination
|
||
4: optional Identity sender
|
||
5: optional Identity receiver
|
||
6: optional Quote quote
|
||
}
|
||
|
||
typedef withdrawals_domain.Destination Destination
|
||
typedef withdrawals_domain.Identity Identity
|
||
|
||
struct Cash {
|
||
1: required domain.Amount amount
|
||
2: required domain.Currency currency
|
||
}
|
||
|
||
/**
|
||
* Данные для получения котировки на заданную сумму по выбранным валютам.
|
||
*/
|
||
struct GetQuoteParams {
|
||
1: optional base.ID idempotency_id
|
||
2: required domain.Currency currency_from
|
||
3: required domain.Currency currency_to
|
||
/**
|
||
* Сумма в одной из валют обмена
|
||
*/
|
||
4: required Cash exchange_cash
|
||
}
|
||
|
||
union QuoteFailure {
|
||
1: LimitExceededFailure limit_exceeded
|
||
}
|
||
|
||
union LimitExceededFailure {
|
||
1: GeneralFailure value_above_max_limit
|
||
2: GeneralFailure value_below_min_limit
|
||
}
|
||
|
||
struct GeneralFailure {}
|
||
|
||
exception GetQuoteFailure {
|
||
1: required QuoteFailure failure
|
||
}
|
||
|
||
///
|
||
|
||
/**
|
||
* Результат обращения к адаптеру в рамках сессии.
|
||
*
|
||
* В результате обращения адаптер может решить, следует ли:
|
||
* - завершить сессию взаимодействия с провайдером (FinishIntent); или
|
||
* - просто приостановить на определённое время (SleepIntent), обновив своё состояние, которое
|
||
* вернётся к нему в последующем запросе.
|
||
*/
|
||
struct ProcessResult {
|
||
1: required Intent intent
|
||
2: optional InternalState next_state
|
||
3: optional domain.TransactionInfo trx
|
||
}
|
||
|
||
struct Quote {
|
||
1: required Cash cash_from
|
||
2: required Cash cash_to
|
||
3: required base.Timestamp created_at
|
||
4: required base.Timestamp expires_on
|
||
5: required QuoteData quote_data
|
||
}
|
||
|
||
struct Callback {
|
||
1: required CallbackTag tag
|
||
2: required CallbackPayload payload
|
||
}
|
||
|
||
struct CallbackResponse {
|
||
1: required CallbackResponsePayload payload
|
||
}
|
||
|
||
/**
|
||
* Результат обработки адаптером обратного вызова в рамках сессии.
|
||
*/
|
||
struct CallbackResult {
|
||
1: required Intent intent
|
||
2: optional InternalState next_state
|
||
3: required CallbackResponse response
|
||
4: optional domain.TransactionInfo trx
|
||
}
|
||
|
||
service Adapter {
|
||
|
||
/**
|
||
* Запрос к адаптеру на проведение взаимодействия с провайдером в рамках платежной сессии.
|
||
*/
|
||
ProcessResult ProcessWithdrawal (
|
||
1: Withdrawal withdrawal
|
||
2: InternalState state
|
||
3: Options opts
|
||
)
|
||
throws (
|
||
)
|
||
|
||
/**
|
||
* Запрос к адаптеру на получение котировки.
|
||
*/
|
||
Quote GetQuote (
|
||
1: GetQuoteParams params
|
||
2: Options opts
|
||
)
|
||
throws (
|
||
1: GetQuoteFailure ex1
|
||
)
|
||
|
||
/**
|
||
* Запрос к адаптеру на обработку обратного вызова.
|
||
*/
|
||
CallbackResult HandleCallback (
|
||
1: Callback callback,
|
||
2: Withdrawal withdrawal
|
||
3: InternalState state
|
||
4: Options opts
|
||
)
|
||
throws (
|
||
)
|
||
|
||
}
|
||
|
||
exception SessionNotFound {}
|
||
|
||
union ProcessCallbackResult {
|
||
/** Вызов был обработан в рамках сесии */
|
||
1: ProcessCallbackSucceeded succeeded
|
||
|
||
/** Сессия уже завершена, вызов обработать не удалось */
|
||
2: ProcessCallbackFinished finished
|
||
}
|
||
|
||
struct ProcessCallbackSucceeded {
|
||
1: required CallbackResponse response
|
||
}
|
||
|
||
struct ProcessCallbackFinished {
|
||
/**
|
||
* Состояние сессии после обработки последнего ответа адаптера.
|
||
*/
|
||
1: required Withdrawal withdrawal
|
||
2: required InternalState state
|
||
3: required Options opts
|
||
}
|
||
|
||
service AdapterHost {
|
||
|
||
/**
|
||
* Запрос к процессингу на обработку обратного вызова от провайдера.
|
||
* Обработка этого метода процессингом зависит от состояния сессии:
|
||
* - будет вызван Adapter.HandleCallback с контекстом сессии, если сессия еще активна,
|
||
* и вызов с таким идентификатором не обрабатывался; или
|
||
* - будет возвращен прошлый ответ, если вызов с таким идентификатором уже обрабатывался
|
||
* вне зависимости от того завершена сессия или нет; или
|
||
* - будет возвращен ответ, что сессия уже завершена, если сессия завершена, и вызов с таким
|
||
* идентификатором не был обработан успешно.
|
||
*/
|
||
ProcessCallbackResult ProcessCallback (1: Callback callback)
|
||
throws (
|
||
1: SessionNotFound ex1
|
||
)
|
||
|
||
}
|