syntax = "proto3";

package yandex.cloud.organizationmanager.v1;

import "google/api/annotations.proto";
import "yandex/cloud/api/operation.proto";
import "yandex/cloud/oauth/claims.proto";
import "yandex/cloud/operation/operation.proto";
import "yandex/cloud/validation.proto";

option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/organizationmanager/v1;organizationmanager";
option java_package = "yandex.cloud.api.organizationmanager.v1";

// A set of methods for managing Organization users.
service UserService {
    // List organization active members.
    rpc ListMembers (ListMembersRequest) returns (ListMembersResponse) {
        option (google.api.http) = { get: "/organization-manager/v1/organizations/{organization_id}/users" };
    }

    // Delete user membership.
    rpc DeleteMembership (DeleteMembershipRequest) returns (operation.Operation) {
      option (google.api.http) = { delete: "/organization-manager/v1/organizations/{organization_id}/users/{subject_id}" };
      option (yandex.cloud.api.operation) = {
        metadata: "DeleteMembershipMetadata"
        response: "DeleteMembershipResponse"
      };
    }
}

message ListMembersRequest {
    // ID of the Organization resource to list members for.
    string organization_id = 1 [(required) = true, (length) = "<=50"];

    // The maximum number of results per page to return. If the number of available
    // results is larger than [page_size], the service returns a [ListMembersResponse.next_page_token]
    // that can be used to get the next page of results in subsequent list requests.
    // Acceptable values are 0 to 1000, inclusive. Default value: 100.
    int64 page_size = 2 [(value) = "0-1000"];

    // Page token. Set [page_token]
    // to the [ListMembersResponse.next_page_token]
    // returned by a previous list request to get the next page of results.
    string page_token = 3 [(length) = "<=100"];
}

message ListMembersResponse {
    // List of users for the specified organization.
    repeated OrganizationUser users = 1;

    // This token allows you to get the next page of results for list requests. If the number of results
    // is larger than [ListMembersResponse.page_size], use the [next_page_token] as the value
    // for the [ListMembersRequest.page_token] query parameter in the next list request.
    // Each subsequent list request will have its own [next_page_token] to continue paging through the results.
    string next_page_token = 2;

    message OrganizationUser {
        // OpenID standard claims with additional Yandex.Organization claims.
        yandex.cloud.oauth.SubjectClaims subject_claims = 1;
    }
}

message DeleteMembershipRequest {
    // ID of the organization to delete membership.
    string organization_id = 1 [(required) = true, (length) = "<=50"];

    // ID of the subject that is being deleted from organization.
    // By default equals to authenticated subject.
    string subject_id = 2 [(length) = "<=50"];
}

message DeleteMembershipMetadata {
    // ID of the organization to delete membership.
    string organization_id = 1 [(required) = true, (length) = "<=50"];

    // ID of the subject that is being deleted from organization.
    string subject_id = 2 [(required) = true, (length) = "<=50"];
}

message DeleteMembershipResponse {
    // ID of the organization to delete membership.
    string organization_id = 1 [(required) = true, (length) = "<=50"];

    // ID of the subject that is being deleted from organization.
    string subject_id = 2 [(required) = true, (length) = "<=50"];
}
