Select Git revision
spaces.proto
spaces.proto 6.71 KiB
syntax = "proto3";
option go_package = "git.perx.ru/perxis/perxis-go/proto/spaces;spaces";
package content.spaces;
import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto";
import "common/common.proto";
message Space {
string id = 1;
string org_id = 2;
string name = 3;
string description = 4;
// Deprecated
State state = 5;
string transfer_to_org = 6; // идентификатор организации, в которую запрошен перенос пространства
Config config = 10;
StateInfo state_info = 11;
}
enum State {
UNKNOWN = 0;
NEW = 1;
READY = 2;
PREPARING = 3;
MAINTENANCE = 4;
MIGRATION = 5;
DELETING = 6;
ERROR = 7;
}
message StateInfo {
State state = 1;
string info = 2;
int32 db_version = 3;
google.protobuf.Timestamp time = 4;
}
message Config {
// Deprecated
repeated string features = 1;
}
message CreateRequest {
Space space = 1;
}
message CreateResponse {
Space created = 1;
}
message GetRequest {
string space_id = 1;
}
message GetResponse {
Space space = 1;
}
message ListRequest {
string org_id = 1;
}
message ListResponse {
repeated Space spaces = 1;
}
message UpdateRequest {
Space space = 1;
}
message UpdateConfigRequest {
string id = 1;
Config config = 2;
}
message DeleteRequest {
string id = 1;
}
message TransferRequest {
string id = 1; // Идентификатор перемещаемого пространства
string transfer_to_org = 2; // Идентификатор организации, в которую пространство должно быть перемещено
}
message AbortTransferRequest {
string id = 1; // Идентификатор перемещаемого пространства
}
message ListTransfersRequest {
string org_id = 1;
}
message ListTransfersResponse {
repeated Space spaces = 1;
}
message MoveRequest {
string id = 1; // Идентификатор перемещаемого пространства
string org_id = 2; // Идентификатор организации, в которую пространство должно быть перемещено. Обязателен для заполнения только в случае запросов с системным уровнем доступа, в остальных случаях опционален
}
message Filter {
repeated string id = 1; // Список ID пространств
repeated string org_id = 2; // Список организаций
repeated string name = 3; // Список названий
repeated State state = 4; // Список состояний
repeated string transfer_to_org = 5; // Список организаций, в которые запрошен перенос пространства
}
message FindRequest {
// Фильтры для поиска
Filter filter = 1;
// Опции поиска
common.FindOptions options = 2;
}
message FindResponse {
repeated Space spaces = 1;
int32 total = 2;
}
service Spaces {
rpc Create(CreateRequest) returns(CreateResponse) {}
rpc Get(GetRequest) returns(GetResponse) {}
rpc List(ListRequest) returns(ListResponse) {}
rpc Find(FindRequest) returns(FindResponse) {}
rpc Update(UpdateRequest) returns(google.protobuf.Empty) {}
rpc UpdateConfig(UpdateConfigRequest) returns(google.protobuf.Empty) {}
rpc Delete(DeleteRequest) returns(google.protobuf.Empty) {}
// Transfer устанавливает для пространства значение поля RequestedMoveTo. После этого пространство
// будет отображаться в списке входящих запросов на перемещение в организации `orgID` (запрос ListIncoming)
// С пространством можно продолжать работу в текущей организации, пока запрос на перемещение не будет
// принят в целевой организации
// Перенос может быть инициирован только владельцем организации, которой принадлежит пространство
rpc Transfer(TransferRequest) returns(google.protobuf.Empty) {}
// AbortTransfer - отменить перемещение пространства в другую организацию. Может быть вызван как
// владельцем пространства-инициатора, там и владельцем принимающего пространства
rpc AbortTransfer(AbortTransferRequest) returns(google.protobuf.Empty) {}
// ListTransfers возвращает список пространств, перемещение которых было запрошено в текущую организацию
rpc ListTransfers(ListTransfersRequest) returns(ListTransfersResponse) {}
// Move - перенести пространство в организацию, установленную в Space.TransferToOrg. Пространство переносится со
// всеми входящими в него данными: ролями, участниками, контентом, пр. и более не будет доступно в
// исходной организации.
// В случае, если запрос осуществляется с системным уровнем доступа и передан параметр `org_id`, то перенос будет
// осуществлен вне зависимости от того, был он инициирован через метод `Transfer` или нет
rpc Move(MoveRequest) returns(google.protobuf.Empty) {}
}
// SpacesEvent описывает события сервиса Spaces, связанные с пространствами
message SpaceEvent {
// Идентификатор пространства
string space_id = 1;
// Идентификатор организации
string org_id = 2;
// Событие создания пространства
message CreateEvent {}
// Событие обновления пространства
message UpdateEvent {}
// Событие удаления пространства
message DeleteEvent {}
// Событие перемещения пространства между организациями
message MoveEvent {
string prev_org_id = 1;
}
// Событие изменения состояния пространства
message StateChangeEvent {
StateInfo state = 1;
StateInfo prev = 2;
}
oneof event {
CreateEvent create = 100;
UpdateEvent update = 101;
DeleteEvent delete = 102;
MoveEvent move = 103;
StateChangeEvent state_change = 104;
}
}