damsel/proto/domain_config.thrift
2016-07-01 14:18:41 +03:00

127 lines
3.0 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.

/**
* Интерфейс и связанные с ним определения сервиса конфигурации предметной
* области (domain config).
*/
include "domain.thrift"
namespace java com.rbkmoney.damsel.domain_config
namespace erl domain
/**
* Маркер вершины истории.
*/
struct Head {}
typedef i64 Version
/**
* Референс может указывать либо на конкретную
* версию либо на наиболее актуальную.
*/
union Reference {
1: Version version;
2: Head head;
}
/**
* Снэпшот это определенная версия данных
* конфигурации домена
*/
struct Snapshot {
1: Version version
2: domain.Domain domain
}
/**
* Возможные операции над набором объектов.
*/
struct Commit {
1: required list<Operation> ops
}
/**
* История это последовательность коммитов
*/
typedef map<Version, Commit> History
union Operation {
1: InsertOp insert;
2: UpdateOp update;
3: RemoveOp remove;
}
struct InsertOp {
1: required domain.DomainObject object;
}
/**
* Содержит значения до и после внесенных изменений
*/
struct UpdateOp {
1: required domain.DomainObject old_object;
2: required domain.DomainObject new_object;
}
struct RemoveOp {
1: required domain.DomainObject object;
}
struct VersionedObject {
1: Version version
2: domain.DomainObject object
}
/**
* Требуемая версия отсутствует
*/
exception VersionNotFound {}
/**
* Объект не найден в домене
*/
exception ObjectNotFound {}
/**
* Возникает в случаях, если коммит
* несовместим с уже примененными ранее
*/
exception OperationConflict {}
/**
* Интерфейс сервиса конфигурации предметной области.
*/
service RepositoryClient {
/**
* Возвращает объект из домена определенной или последней версии
*/
VersionedObject checkoutObject (1: Reference version_ref, 2: domain.Reference object_ref)
throws (1: VersionNotFound ex1, 2: ObjectNotFound ex2);
}
service Repository {
/**
* Применить изменения к определенной версии.
* Возвращает следующую версию
*/
Version Commit (1: Version version, 2: Commit commit)
throws (1: VersionNotFound ex1, 2: OperationConflict ex2);
/**
* Получить снэпшот конкретной версии
*/
Snapshot Checkout (1: Reference reference)
throws (1: VersionNotFound ex1)
/**
* Получить новые коммиты следующие за указанной версией
*/
History Pull (1: Version version)
throws (1: VersionNotFound ex1)
}