diff --git a/cmd/start/start.go b/cmd/start/start.go index e3d84625b4..f0a8d89003 100644 --- a/cmd/start/start.go +++ b/cmd/start/start.go @@ -463,7 +463,7 @@ func startAPIs( if err := apis.RegisterService(ctx, settings_v2beta.CreateServer(commands, queries)); err != nil { return nil, err } - if err := apis.RegisterService(ctx, org_v2beta.CreateServer(commands, queries, permissionCheck)); err != nil { + if err := apis.RegisterService(ctx, org_v2beta.CreateServer(config.SystemDefaults, commands, queries, permissionCheck)); err != nil { return nil, err } if err := apis.RegisterService(ctx, feature_v2beta.CreateServer(commands, queries)); err != nil { diff --git a/internal/api/grpc/management/user.go b/internal/api/grpc/management/user.go index 5b82eb5afe..f318051e63 100644 --- a/internal/api/grpc/management/user.go +++ b/internal/api/grpc/management/user.go @@ -901,6 +901,7 @@ func (s *Server) ListHumanLinkedIDPs(ctx context.Context, req *mgmt_pb.ListHuman Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.LastRun), }, nil } + func (s *Server) RemoveHumanLinkedIDP(ctx context.Context, req *mgmt_pb.RemoveHumanLinkedIDPRequest) (*mgmt_pb.RemoveHumanLinkedIDPResponse, error) { objectDetails, err := s.command.RemoveUserIDPLink(ctx, RemoveHumanLinkedIDPRequestToDomain(ctx, req)) if err != nil { @@ -947,18 +948,21 @@ func cascadingIAMMembership(membership *query.IAMMembership) *command.CascadingI } return &command.CascadingIAMMembership{IAMID: membership.IAMID} } + func cascadingOrgMembership(membership *query.OrgMembership) *command.CascadingOrgMembership { if membership == nil { return nil } return &command.CascadingOrgMembership{OrgID: membership.OrgID} } + func cascadingProjectMembership(membership *query.ProjectMembership) *command.CascadingProjectMembership { if membership == nil { return nil } return &command.CascadingProjectMembership{ProjectID: membership.ProjectID} } + func cascadingProjectGrantMembership(membership *query.ProjectGrantMembership) *command.CascadingProjectGrantMembership { if membership == nil { return nil diff --git a/internal/api/grpc/org/v2beta/helper.go b/internal/api/grpc/org/v2beta/helper.go index 93feea0d4a..085b003aca 100644 --- a/internal/api/grpc/org/v2beta/helper.go +++ b/internal/api/grpc/org/v2beta/helper.go @@ -6,6 +6,7 @@ import ( metadata "github.com/zitadel/zitadel/internal/api/grpc/metadata/v2beta" v2beta_object "github.com/zitadel/zitadel/internal/api/grpc/object/v2beta" "github.com/zitadel/zitadel/internal/command" + "github.com/zitadel/zitadel/internal/config/systemdefaults" "github.com/zitadel/zitadel/internal/domain" "github.com/zitadel/zitadel/internal/eventstore/v1/models" "github.com/zitadel/zitadel/internal/query" @@ -14,6 +15,7 @@ import ( "google.golang.org/protobuf/types/known/timestamppb" // TODO fix below + filter "github.com/zitadel/zitadel/internal/api/grpc/filter/v2beta" org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta" v2beta_org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta" ) @@ -21,9 +23,12 @@ import ( // NOTE: most of this code is copied from `internal/api/grpc/admin/*`, as we will eventually axe the previous versons of the API, // we will have code duplication until then -func listOrgRequestToModel(request *v2beta_org.ListOrganizationsRequest) (*query.OrgSearchQueries, error) { - offset, limit, asc := v2beta_object.ListQueryToModel(request.Query) - queries, err := OrgQueriesToModel(request.Queries) +func listOrgRequestToModel(systemDefaults systemdefaults.SystemDefaults, request *v2beta_org.ListOrganizationsRequest) (*query.OrgSearchQueries, error) { + offset, limit, asc, err := filter.PaginationPbToQuery(systemDefaults, request.Pagination) + if err != nil { + return nil, err + } + queries, err := OrgQueriesToModel(request.Filter) if err != nil { return nil, err } @@ -94,7 +99,7 @@ func OrgViewsToPb(orgs []*query.Org) []*v2beta_org.Organization { return o } -func OrgQueriesToModel(queries []*v2beta_org.OrgQuery) (_ []query.SearchQuery, err error) { +func OrgQueriesToModel(queries []*v2beta_org.OrgQueryFilter) (_ []query.SearchQuery, err error) { q := make([]query.SearchQuery, len(queries)) for i, query := range queries { q[i], err = OrgQueryToModel(query) @@ -105,15 +110,15 @@ func OrgQueriesToModel(queries []*v2beta_org.OrgQuery) (_ []query.SearchQuery, e return q, nil } -func OrgQueryToModel(apiQuery *v2beta_org.OrgQuery) (query.SearchQuery, error) { +func OrgQueryToModel(apiQuery *v2beta_org.OrgQueryFilter) (query.SearchQuery, error) { switch q := apiQuery.Query.(type) { - case *v2beta_org.OrgQuery_DomainQuery: + case *v2beta_org.OrgQueryFilter_DomainQuery: return query.NewOrgVerifiedDomainSearchQuery(v2beta_object.TextMethodToQuery(q.DomainQuery.Method), q.DomainQuery.Domain) - case *v2beta_org.OrgQuery_NameQuery: + case *v2beta_org.OrgQueryFilter_NameQuery: return query.NewOrgNameSearchQuery(v2beta_object.TextMethodToQuery(q.NameQuery.Method), q.NameQuery.Name) - case *v2beta_org.OrgQuery_StateQuery: + case *v2beta_org.OrgQueryFilter_StateQuery: return query.NewOrgStateSearchQuery(OrgStateToDomain(q.StateQuery.State)) - case *v2beta_org.OrgQuery_IdQuery: + case *v2beta_org.OrgQueryFilter_IdQuery: return query.NewOrgIDSearchQuery(q.IdQuery.Id) default: return nil, zerrors.ThrowInvalidArgument(nil, "ORG-vR9nC", "List.Query.Invalid") @@ -164,10 +169,9 @@ func OrgViewToPb(org *query.Org) *v2beta_org.Organization { } } -func ListOrgDomainsRequestToModel(req *org.ListOrganizationDomainsRequest) (*query.OrgDomainSearchQueries, error) { - offset, limit, asc := ListQueryToModel(req.Query) - // queries, err := org_grpc.DomainQueriesToModel(req.Queries) - queries, err := DomainQueriesToModel(req.Queries) +func ListOrgDomainsRequestToModel(systemDefaults systemdefaults.SystemDefaults, request *org.ListOrganizationDomainsRequest) (*query.OrgDomainSearchQueries, error) { + offset, limit, asc, err := filter.PaginationPbToQuery(systemDefaults, request.Pagination) + queries, err := DomainQueriesToModel(request.Filter) if err != nil { return nil, err } @@ -249,9 +253,9 @@ func BulkSetOrgMetadataToDomain(req *v2beta_org.SetOrganizationMetadataRequest) return metadata } -func ListOrgMetadataToDomain(request *v2beta_org.ListOrganizationMetadataRequest) (*query.OrgMetadataSearchQueries, error) { - offset, limit, asc := v2beta_object.ListQueryToModel(request.Query) - queries, err := metadata.OrgMetadataQueriesToQuery(request.Queries) +func ListOrgMetadataToDomain(systemDefaults systemdefaults.SystemDefaults, request *v2beta_org.ListOrganizationMetadataRequest) (*query.OrgMetadataSearchQueries, error) { + offset, limit, asc, err := filter.PaginationPbToQuery(systemDefaults, request.Pagination) + queries, err := metadata.OrgMetadataQueriesToQuery(request.Filter) if err != nil { return nil, err } diff --git a/internal/api/grpc/org/v2beta/integration_test/org_test.go b/internal/api/grpc/org/v2beta/integration_test/org_test.go index d1e9f13b36..6a705ed189 100644 --- a/internal/api/grpc/org/v2beta/integration_test/org_test.go +++ b/internal/api/grpc/org/v2beta/integration_test/org_test.go @@ -276,7 +276,7 @@ func TestServer_ListOrganization(t *testing.T) { tests := []struct { name string ctx context.Context - query []*v2beta_org.OrgQuery + query []*v2beta_org.OrgQueryFilter want []*v2beta_org.Organization wantErr bool }{ @@ -301,9 +301,9 @@ func TestServer_ListOrganization(t *testing.T) { { name: "list organizations by id happy path", ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner), - query: []*v2beta_org.OrgQuery{ + query: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_IdQuery{ + Query: &v2beta_org.OrgQueryFilter_IdQuery{ IdQuery: &v2beta_org.OrgIDQuery{ Id: orgs[1].Id, }, @@ -320,9 +320,9 @@ func TestServer_ListOrganization(t *testing.T) { { name: "list organizations by state active", ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner), - query: []*v2beta_org.OrgQuery{ + query: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_StateQuery{ + Query: &v2beta_org.OrgQueryFilter_StateQuery{ StateQuery: &v2beta_org.OrgStateQuery{ State: v2beta_org.OrgState_ORG_STATE_ACTIVE, }, @@ -343,9 +343,9 @@ func TestServer_ListOrganization(t *testing.T) { { name: "list organizations by state inactive", ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner), - query: []*v2beta_org.OrgQuery{ + query: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_StateQuery{ + Query: &v2beta_org.OrgQueryFilter_StateQuery{ StateQuery: &v2beta_org.OrgStateQuery{ State: v2beta_org.OrgState_ORG_STATE_INACTIVE, }, @@ -362,9 +362,9 @@ func TestServer_ListOrganization(t *testing.T) { { name: "list organizations by id bad id", ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner), - query: []*v2beta_org.OrgQuery{ + query: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_IdQuery{ + Query: &v2beta_org.OrgQueryFilter_IdQuery{ IdQuery: &v2beta_org.OrgIDQuery{ Id: "bad id", }, @@ -375,9 +375,9 @@ func TestServer_ListOrganization(t *testing.T) { { name: "list organizations specify org name equals", ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner), - query: []*v2beta_org.OrgQuery{ + query: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_NameQuery{ + Query: &v2beta_org.OrgQueryFilter_NameQuery{ NameQuery: &v2beta_org.OrgNameQuery{ Name: orgsName[1], Method: v2beta_object.TextQueryMethod_TEXT_QUERY_METHOD_EQUALS, @@ -395,9 +395,9 @@ func TestServer_ListOrganization(t *testing.T) { { name: "list organizations specify org name contains", ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner), - query: []*v2beta_org.OrgQuery{ + query: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_NameQuery{ + Query: &v2beta_org.OrgQueryFilter_NameQuery{ NameQuery: &v2beta_org.OrgNameQuery{ Name: func() string { return orgsName[1][1 : len(orgsName[1])-2] @@ -417,9 +417,9 @@ func TestServer_ListOrganization(t *testing.T) { { name: "list organizations specify org name contains IGNORE CASE", ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner), - query: []*v2beta_org.OrgQuery{ + query: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_NameQuery{ + Query: &v2beta_org.OrgQueryFilter_NameQuery{ NameQuery: &v2beta_org.OrgNameQuery{ Name: func() string { return strings.ToUpper(orgsName[1][1 : len(orgsName[1])-2]) @@ -439,15 +439,15 @@ func TestServer_ListOrganization(t *testing.T) { { name: "list organizations specify domain name equals", ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner), - query: []*v2beta_org.OrgQuery{ + query: []*v2beta_org.OrgQueryFilter{ { - Query: &org.OrgQuery_DomainQuery{ + Query: &org.OrgQueryFilter_DomainQuery{ DomainQuery: &org.OrgDomainQuery{ Domain: func() string { listOrgRes, err := Client.ListOrganizations(CTX, &v2beta_org.ListOrganizationsRequest{ - Queries: []*v2beta_org.OrgQuery{ + Filter: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_IdQuery{ + Query: &v2beta_org.OrgQueryFilter_IdQuery{ IdQuery: &v2beta_org.OrgIDQuery{ Id: orgs[1].Id, }, @@ -474,9 +474,9 @@ func TestServer_ListOrganization(t *testing.T) { { name: "list organizations specify domain name contains", ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner), - query: []*v2beta_org.OrgQuery{ + query: []*v2beta_org.OrgQueryFilter{ { - Query: &org.OrgQuery_DomainQuery{ + Query: &org.OrgQueryFilter_DomainQuery{ DomainQuery: &org.OrgDomainQuery{ Domain: func() string { domain := strings.ToLower(strings.ReplaceAll(orgsName[1][1:len(orgsName[1])-2], " ", "-")) @@ -497,9 +497,9 @@ func TestServer_ListOrganization(t *testing.T) { { name: "list organizations specify org name contains IGNORE CASE", ctx: Instance.WithAuthorization(context.Background(), integration.UserTypeIAMOwner), - query: []*v2beta_org.OrgQuery{ + query: []*v2beta_org.OrgQueryFilter{ { - Query: &org.OrgQuery_DomainQuery{ + Query: &org.OrgQueryFilter_DomainQuery{ DomainQuery: &org.OrgDomainQuery{ Domain: func() string { domain := strings.ToUpper(strings.ReplaceAll(orgsName[1][1:len(orgsName[1])-2], " ", "-")) @@ -523,7 +523,7 @@ func TestServer_ListOrganization(t *testing.T) { retryDuration, tick := integration.WaitForAndTickWithMaxDuration(context.Background(), 10*time.Minute) require.EventuallyWithT(t, func(ttt *assert.CollectT) { got, err := Client.ListOrganizations(tt.ctx, &v2beta_org.ListOrganizationsRequest{ - Queries: tt.query, + Filter: tt.query, }) if tt.wantErr { @@ -596,9 +596,9 @@ func TestServer_DeleteOrganization(t *testing.T) { assert.WithinRange(t, gotCD, now.Add(-time.Minute), now.Add(time.Minute)) listOrgRes, err := Client.ListOrganizations(tt.ctx, &v2beta_org.ListOrganizationsRequest{ - Queries: []*v2beta_org.OrgQuery{ + Filter: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_IdQuery{ + Query: &v2beta_org.OrgQueryFilter_IdQuery{ IdQuery: &v2beta_org.OrgIDQuery{ Id: tt.req.Id, }, @@ -639,9 +639,9 @@ func TestServer_DeactivateReactivateOrganization(t *testing.T) { // 2. check inital state of organization listOrgRes, err := Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{ - Queries: []*v2beta_org.OrgQuery{ + Filter: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_IdQuery{ + Query: &v2beta_org.OrgQueryFilter_IdQuery{ IdQuery: &v2beta_org.OrgIDQuery{ Id: orgId, }, @@ -663,9 +663,9 @@ func TestServer_DeactivateReactivateOrganization(t *testing.T) { // 4. check organization state is deactivated listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{ - Queries: []*v2beta_org.OrgQuery{ + Filter: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_IdQuery{ + Query: &v2beta_org.OrgQueryFilter_IdQuery{ IdQuery: &v2beta_org.OrgIDQuery{ Id: orgId, }, @@ -686,9 +686,9 @@ func TestServer_DeactivateReactivateOrganization(t *testing.T) { // 6. repeat check organization state is still deactivated listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{ - Queries: []*v2beta_org.OrgQuery{ + Filter: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_IdQuery{ + Query: &v2beta_org.OrgQueryFilter_IdQuery{ IdQuery: &v2beta_org.OrgIDQuery{ Id: orgId, }, @@ -710,9 +710,9 @@ func TestServer_DeactivateReactivateOrganization(t *testing.T) { // 8. check organization state is active listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{ - Queries: []*v2beta_org.OrgQuery{ + Filter: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_IdQuery{ + Query: &v2beta_org.OrgQueryFilter_IdQuery{ IdQuery: &v2beta_org.OrgIDQuery{ Id: orgId, }, @@ -732,9 +732,9 @@ func TestServer_DeactivateReactivateOrganization(t *testing.T) { // 10. repeat check organization state is still active listOrgRes, err = Client.ListOrganizations(ctx, &v2beta_org.ListOrganizationsRequest{ - Queries: []*v2beta_org.OrgQuery{ + Filter: []*v2beta_org.OrgQueryFilter{ { - Query: &v2beta_org.OrgQuery_IdQuery{ + Query: &v2beta_org.OrgQueryFilter_IdQuery{ IdQuery: &v2beta_org.OrgIDQuery{ Id: orgId, }, diff --git a/internal/api/grpc/org/v2beta/org.go b/internal/api/grpc/org/v2beta/org.go index f3e07098b9..bc0dfda55f 100644 --- a/internal/api/grpc/org/v2beta/org.go +++ b/internal/api/grpc/org/v2beta/org.go @@ -9,6 +9,7 @@ import ( "github.com/zitadel/zitadel/internal/command" "github.com/zitadel/zitadel/internal/query" "github.com/zitadel/zitadel/internal/zerrors" + filter "github.com/zitadel/zitadel/pkg/grpc/filter/v2beta" org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta" v2beta_org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta" "google.golang.org/protobuf/types/known/timestamppb" @@ -38,7 +39,7 @@ func (s *Server) UpdateOrganization(ctx context.Context, request *v2beta_org.Upd } func (s *Server) ListOrganizations(ctx context.Context, request *v2beta_org.ListOrganizationsRequest) (*v2beta_org.ListOrganizationsResponse, error) { - queries, err := listOrgRequestToModel(request) + queries, err := listOrgRequestToModel(s.systemDefaults, request) if err != nil { return nil, err } @@ -47,8 +48,11 @@ func (s *Server) ListOrganizations(ctx context.Context, request *v2beta_org.List return nil, err } return &v2beta_org.ListOrganizationsResponse{ - Result: OrgViewsToPb(orgs.Orgs), - Details: object.ToListDetails(orgs.SearchResponse), + Result: OrgViewsToPb(orgs.Orgs), + Pagination: &filter.PaginationResponse{ + TotalResult: orgs.Count, + AppliedLimit: uint64(request.GetPagination().GetLimit()), + }, }, nil } @@ -73,7 +77,7 @@ func (s *Server) SetOrganizationMetadata(ctx context.Context, request *v2beta_or } func (s *Server) ListOrganizationMetadata(ctx context.Context, request *v2beta_org.ListOrganizationMetadataRequest) (*v2beta_org.ListOrganizationMetadataResponse, error) { - metadataQueries, err := ListOrgMetadataToDomain(request) + metadataQueries, err := ListOrgMetadataToDomain(s.systemDefaults, request) if err != nil { return nil, err } @@ -82,8 +86,11 @@ func (s *Server) ListOrganizationMetadata(ctx context.Context, request *v2beta_o return nil, err } return &v2beta_org.ListOrganizationMetadataResponse{ - Result: metadata.OrgMetadataListToPb(res.Metadata), - Details: object.ToListDetails(res.SearchResponse), + Result: metadata.OrgMetadataListToPb(res.Metadata), + Pagination: &filter.PaginationResponse{ + TotalResult: res.Count, + AppliedLimit: uint64(request.GetPagination().GetLimit()), + }, }, nil } @@ -132,7 +139,7 @@ func (s *Server) AddOrganizationDomain(ctx context.Context, request *org.AddOrga } func (s *Server) ListOrganizationDomains(ctx context.Context, req *org.ListOrganizationDomainsRequest) (*org.ListOrganizationDomainsResponse, error) { - queries, err := ListOrgDomainsRequestToModel(req) + queries, err := ListOrgDomainsRequestToModel(s.systemDefaults, req) if err != nil { return nil, err } @@ -147,8 +154,11 @@ func (s *Server) ListOrganizationDomains(ctx context.Context, req *org.ListOrgan return nil, err } return &org.ListOrganizationDomainsResponse{ - Result: object.DomainsToPb(domains.Domains), - Details: object.ToListDetails(domains.SearchResponse), + Result: object.DomainsToPb(domains.Domains), + Pagination: &filter.PaginationResponse{ + TotalResult: domains.Count, + AppliedLimit: uint64(req.GetPagination().GetLimit()), + }, }, nil } diff --git a/internal/api/grpc/org/v2beta/server.go b/internal/api/grpc/org/v2beta/server.go index 89dba81702..b7e8d4994f 100644 --- a/internal/api/grpc/org/v2beta/server.go +++ b/internal/api/grpc/org/v2beta/server.go @@ -6,6 +6,7 @@ import ( "github.com/zitadel/zitadel/internal/api/authz" "github.com/zitadel/zitadel/internal/api/grpc/server" "github.com/zitadel/zitadel/internal/command" + "github.com/zitadel/zitadel/internal/config/systemdefaults" "github.com/zitadel/zitadel/internal/domain" "github.com/zitadel/zitadel/internal/query" org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta" @@ -15,6 +16,7 @@ var _ org.OrganizationServiceServer = (*Server)(nil) type Server struct { org.UnimplementedOrganizationServiceServer + systemDefaults systemdefaults.SystemDefaults command *command.Commands query *query.Queries checkPermission domain.PermissionCheck @@ -23,11 +25,13 @@ type Server struct { type Config struct{} func CreateServer( + systemDefaults systemdefaults.SystemDefaults, command *command.Commands, query *query.Queries, checkPermission domain.PermissionCheck, ) *Server { return &Server{ + systemDefaults: systemDefaults, command: command, query: query, checkPermission: checkPermission, diff --git a/proto/zitadel/org/v2beta/org.proto b/proto/zitadel/org/v2beta/org.proto index 5e65b558dd..33dbe48983 100644 --- a/proto/zitadel/org/v2beta/org.proto +++ b/proto/zitadel/org/v2beta/org.proto @@ -45,7 +45,7 @@ enum OrgFieldName { ORG_FIELD_NAME_CREATION_DATE = 2; } -message OrgQuery { +message OrgQueryFilter { oneof query { option (validate.required) = true; diff --git a/proto/zitadel/org/v2beta/org_service.proto b/proto/zitadel/org/v2beta/org_service.proto index fa9c0c1e8a..3cc9661585 100644 --- a/proto/zitadel/org/v2beta/org_service.proto +++ b/proto/zitadel/org/v2beta/org_service.proto @@ -15,6 +15,7 @@ import "google/protobuf/struct.proto"; import "protoc-gen-openapiv2/options/annotations.proto"; import "validate/validate.proto"; import "google/protobuf/timestamp.proto"; +import "zitadel/filter/v2beta/filter.proto"; option go_package = "github.com/zitadel/zitadel/pkg/grpc/org/v2beta;org"; @@ -488,21 +489,21 @@ message ListOrganizationsRequest { json_schema: { description: "Search query for lists"; required: ["query"] - }; + }; }; - // list limitations and ordering - zitadel.object.v2beta.ListQuery query = 1; + // List limitations and ordering. + optional zitadel.filter.v2beta.PaginationRequest pagination = 1; // the field the result is sorted zitadel.org.v2beta.OrgFieldName sorting_column = 2; - //criteria the client is looking for - repeated zitadel.org.v2beta.OrgQuery queries = 3; + // Define the criteria to query for. + // repeated ProjectRoleFilter filters = 4; + repeated zitadel.org.v2beta.OrgQueryFilter filter = 3; } message ListOrganizationsResponse { - zitadel.object.v2beta.ListDetails details = 1; - zitadel.org.v2beta.OrgFieldName sorting_column = 2; - repeated zitadel.org.v2beta.Organization result = 3; + zitadel.filter.v2beta.PaginationResponse pagination = 1; + repeated zitadel.org.v2beta.Organization result = 2; } message DeleteOrganizationRequest { @@ -613,14 +614,15 @@ message ListOrganizationDomainsRequest { description: "Organization ID of the organization you want the domains of." } ]; - //list limitations and ordering - zitadel.object.v2beta.ListQuery query = 2; - //criteria the client is looking for - repeated DomainSearchQuery queries = 3; + + // List limitations and ordering. + optional zitadel.filter.v2beta.PaginationRequest pagination = 2; + // Define the criteria to query for. + repeated DomainSearchQuery filter = 3; } message ListOrganizationDomainsResponse { - zitadel.object.v2beta.ListDetails details = 1; + zitadel.filter.v2beta.PaginationResponse pagination = 1; repeated Domain result = 2; } @@ -638,6 +640,7 @@ message DeleteOrganizationDomainRequest { string domain = 2 [ (validate.rules).string = {min_len: 1, max_len: 200}, (google.api.field_behavior) = REQUIRED, + // repeated ProjectRoleFilter filters = 4; (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { min_length: 1; max_length: 200; @@ -746,17 +749,25 @@ message SetOrganizationMetadataResponse{ } message ListOrganizationMetadataRequest { - string id = 1; - zitadel.object.v2beta.ListQuery query = 2; - repeated zitadel.metadata.v2beta.MetadataQuery queries = 3 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - title: "Medata Query" - description: "Metadata object-specific queries." - }]; + // Organization ID + string id = 1 [ + (validate.rules).string = {min_len: 1, max_len: 200}, + (google.api.field_behavior) = REQUIRED, + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + min_length: 1; + max_length: 200; + example: "\"69629012906488334\""; + } + ]; + + // List limitations and ordering. + optional zitadel.filter.v2beta.PaginationRequest pagination = 2; + // Define the criteria to query for. + repeated zitadel.metadata.v2beta.MetadataQuery filter = 3; } message ListOrganizationMetadataResponse { - zitadel.object.v2beta.ListDetails details = 1; + zitadel.filter.v2beta.PaginationResponse pagination = 1; repeated zitadel.metadata.v2beta.Metadata result = 2; }