105 lines
2.6 KiB
Protocol Buffer
105 lines
2.6 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package forest.v1;
|
|
|
|
import "google/protobuf/timestamp.proto";
|
|
|
|
message Organisation {
|
|
string organisation_id = 1;
|
|
string name = 2;
|
|
google.protobuf.Timestamp created_at = 3;
|
|
}
|
|
|
|
message CreateOrganisationRequest {
|
|
string name = 1;
|
|
}
|
|
message CreateOrganisationResponse {
|
|
string organisation_id = 1;
|
|
}
|
|
|
|
message GetOrganisationRequest {
|
|
oneof identifier {
|
|
string organisation_id = 1;
|
|
string name = 2;
|
|
}
|
|
}
|
|
message GetOrganisationResponse {
|
|
Organisation organisation = 1;
|
|
}
|
|
|
|
message SearchOrganisationsRequest {
|
|
string query = 1;
|
|
int32 page_size = 2;
|
|
string page_token = 3;
|
|
}
|
|
message SearchOrganisationsResponse {
|
|
repeated Organisation organisations = 1;
|
|
string next_page_token = 2;
|
|
int32 total_count = 3;
|
|
}
|
|
|
|
message ListMyOrganisationsRequest {
|
|
// Optional role filter (e.g. "admin"); empty means all roles
|
|
string role = 1;
|
|
}
|
|
message ListMyOrganisationsResponse {
|
|
repeated Organisation organisations = 1;
|
|
// The role the caller has in each organisation (parallel to organisations)
|
|
repeated string roles = 2;
|
|
}
|
|
|
|
// -- Members ------------------------------------------------------------------
|
|
|
|
message OrganisationMember {
|
|
string user_id = 1;
|
|
string username = 2;
|
|
string role = 3;
|
|
google.protobuf.Timestamp joined_at = 4;
|
|
}
|
|
|
|
message AddMemberRequest {
|
|
string organisation_id = 1;
|
|
string user_id = 2;
|
|
string role = 3;
|
|
}
|
|
message AddMemberResponse {
|
|
OrganisationMember member = 1;
|
|
}
|
|
|
|
message RemoveMemberRequest {
|
|
string organisation_id = 1;
|
|
string user_id = 2;
|
|
}
|
|
message RemoveMemberResponse {}
|
|
|
|
message UpdateMemberRoleRequest {
|
|
string organisation_id = 1;
|
|
string user_id = 2;
|
|
string role = 3;
|
|
}
|
|
message UpdateMemberRoleResponse {
|
|
OrganisationMember member = 1;
|
|
}
|
|
|
|
message ListMembersRequest {
|
|
string organisation_id = 1;
|
|
int32 page_size = 2;
|
|
string page_token = 3;
|
|
}
|
|
message ListMembersResponse {
|
|
repeated OrganisationMember members = 1;
|
|
string next_page_token = 2;
|
|
int32 total_count = 3;
|
|
}
|
|
|
|
service OrganisationService {
|
|
rpc CreateOrganisation(CreateOrganisationRequest) returns (CreateOrganisationResponse);
|
|
rpc GetOrganisation(GetOrganisationRequest) returns (GetOrganisationResponse);
|
|
rpc SearchOrganisations(SearchOrganisationsRequest) returns (SearchOrganisationsResponse);
|
|
rpc ListMyOrganisations(ListMyOrganisationsRequest) returns (ListMyOrganisationsResponse);
|
|
rpc AddMember(AddMemberRequest) returns (AddMemberResponse);
|
|
rpc RemoveMember(RemoveMemberRequest) returns (RemoveMemberResponse);
|
|
rpc UpdateMemberRole(UpdateMemberRoleRequest) returns (UpdateMemberRoleResponse);
|
|
rpc ListMembers(ListMembersRequest) returns (ListMembersResponse);
|
|
}
|