From 91a03dbd39a3d8b167e15c94ce1f1ced956b69ce Mon Sep 17 00:00:00 2001 From: Javier Rodriguez Date: Mon, 14 Jul 2025 15:01:41 +0200 Subject: [PATCH 1/3] fix(group): Created at when listing project for groups Signed-off-by: Javier Rodriguez --- app/controlplane/api/controlplane/v1/group.pb.go | 2 +- app/controlplane/api/controlplane/v1/group.proto | 2 +- app/controlplane/api/gen/frontend/controlplane/v1/group.ts | 2 +- .../jsonschema/controlplane.v1.ProjectInfo.jsonschema.json | 4 ++-- .../gen/jsonschema/controlplane.v1.ProjectInfo.schema.json | 4 ++-- app/controlplane/pkg/biz/project.go | 2 +- app/controlplane/pkg/data/group.go | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/controlplane/api/controlplane/v1/group.pb.go b/app/controlplane/api/controlplane/v1/group.pb.go index 9bf4efc7f..87e089f74 100644 --- a/app/controlplane/api/controlplane/v1/group.pb.go +++ b/app/controlplane/api/controlplane/v1/group.pb.go @@ -1524,7 +1524,7 @@ type ProjectInfo struct { Role ProjectMemberRole `protobuf:"varint,4,opt,name=role,proto3,enum=controlplane.v1.ProjectMemberRole" json:"role,omitempty"` // The latest version ID of the project, if available LatestVersionId *string `protobuf:"bytes,5,opt,name=latest_version_id,json=latestVersionId,proto3,oneof" json:"latest_version_id,omitempty"` - // Timestamp when the project was created + // Timestamp when the membership was created CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` } diff --git a/app/controlplane/api/controlplane/v1/group.proto b/app/controlplane/api/controlplane/v1/group.proto index a0e22b7f6..f96b30eb4 100644 --- a/app/controlplane/api/controlplane/v1/group.proto +++ b/app/controlplane/api/controlplane/v1/group.proto @@ -267,6 +267,6 @@ message ProjectInfo { ProjectMemberRole role = 4; // The latest version ID of the project, if available optional string latest_version_id = 5; - // Timestamp when the project was created + // Timestamp when the membership was created google.protobuf.Timestamp created_at = 6; } diff --git a/app/controlplane/api/gen/frontend/controlplane/v1/group.ts b/app/controlplane/api/gen/frontend/controlplane/v1/group.ts index 0f1bfd1db..49462b513 100644 --- a/app/controlplane/api/gen/frontend/controlplane/v1/group.ts +++ b/app/controlplane/api/gen/frontend/controlplane/v1/group.ts @@ -246,7 +246,7 @@ export interface ProjectInfo { latestVersionId?: | string | undefined; - /** Timestamp when the project was created */ + /** Timestamp when the membership was created */ createdAt?: Date; } diff --git a/app/controlplane/api/gen/jsonschema/controlplane.v1.ProjectInfo.jsonschema.json b/app/controlplane/api/gen/jsonschema/controlplane.v1.ProjectInfo.jsonschema.json index a628c16c6..d0f24c47f 100644 --- a/app/controlplane/api/gen/jsonschema/controlplane.v1.ProjectInfo.jsonschema.json +++ b/app/controlplane/api/gen/jsonschema/controlplane.v1.ProjectInfo.jsonschema.json @@ -6,7 +6,7 @@ "patternProperties": { "^(created_at)$": { "$ref": "google.protobuf.Timestamp.jsonschema.json", - "description": "Timestamp when the project was created" + "description": "Timestamp when the membership was created" }, "^(latest_version_id)$": { "description": "The latest version ID of the project, if available", @@ -16,7 +16,7 @@ "properties": { "createdAt": { "$ref": "google.protobuf.Timestamp.jsonschema.json", - "description": "Timestamp when the project was created" + "description": "Timestamp when the membership was created" }, "description": { "description": "Description of the project", diff --git a/app/controlplane/api/gen/jsonschema/controlplane.v1.ProjectInfo.schema.json b/app/controlplane/api/gen/jsonschema/controlplane.v1.ProjectInfo.schema.json index 4e6a5b529..8208f56cb 100644 --- a/app/controlplane/api/gen/jsonschema/controlplane.v1.ProjectInfo.schema.json +++ b/app/controlplane/api/gen/jsonschema/controlplane.v1.ProjectInfo.schema.json @@ -6,7 +6,7 @@ "patternProperties": { "^(createdAt)$": { "$ref": "google.protobuf.Timestamp.schema.json", - "description": "Timestamp when the project was created" + "description": "Timestamp when the membership was created" }, "^(latestVersionId)$": { "description": "The latest version ID of the project, if available", @@ -16,7 +16,7 @@ "properties": { "created_at": { "$ref": "google.protobuf.Timestamp.schema.json", - "description": "Timestamp when the project was created" + "description": "Timestamp when the membership was created" }, "description": { "description": "Description of the project", diff --git a/app/controlplane/pkg/biz/project.go b/app/controlplane/pkg/biz/project.go index d4b86b231..508d6d3df 100644 --- a/app/controlplane/pkg/biz/project.go +++ b/app/controlplane/pkg/biz/project.go @@ -108,7 +108,7 @@ type GroupProjectInfo struct { Role authz.Role // LatestVersionID is the ID of the latest version of the project, if available LatestVersionID *uuid.UUID - // CreatedAt is the timestamp when the project was created + // CreatedAt is the timestamp when the membership was created CreatedAt *time.Time } diff --git a/app/controlplane/pkg/data/group.go b/app/controlplane/pkg/data/group.go index fd4936e15..28cfb9f64 100644 --- a/app/controlplane/pkg/data/group.go +++ b/app/controlplane/pkg/data/group.go @@ -712,7 +712,7 @@ func (g GroupRepo) ListProjectsByGroup(ctx context.Context, orgID uuid.UUID, gro Name: pr.Name, Description: pr.Description, Role: m.Role, - CreatedAt: toTimePtr(pr.CreatedAt), + CreatedAt: toTimePtr(m.CreatedAt), } // If the project has versions, include the latest version ID From 63afab215b458b46bf2196eb05f69d8b48518673 Mon Sep 17 00:00:00 2001 From: Javier Rodriguez Date: Wed, 16 Jul 2025 08:25:05 +0200 Subject: [PATCH 2/3] move message inside response Signed-off-by: Javier Rodriguez --- .../api/controlplane/v1/group.pb.go | 252 +++++++++--------- .../api/controlplane/v1/group.proto | 30 +-- .../api/gen/frontend/controlplane/v1/group.ts | 44 +-- ...ojectsResponse.ProjectInfo.jsonschema.json | 59 ++++ ...stProjectsResponse.ProjectInfo.schema.json | 59 ++++ ...erviceListProjectsResponse.jsonschema.json | 2 +- ...oupServiceListProjectsResponse.schema.json | 2 +- 7 files changed, 288 insertions(+), 160 deletions(-) create mode 100644 app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.jsonschema.json create mode 100644 app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.schema.json diff --git a/app/controlplane/api/controlplane/v1/group.pb.go b/app/controlplane/api/controlplane/v1/group.pb.go index 87e089f74..770054283 100644 --- a/app/controlplane/api/controlplane/v1/group.pb.go +++ b/app/controlplane/api/controlplane/v1/group.pb.go @@ -1457,7 +1457,7 @@ type GroupServiceListProjectsResponse struct { unknownFields protoimpl.UnknownFields // List of projects memberships matching the request criteria - Projects []*ProjectInfo `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects,omitempty"` + Projects []*GroupServiceListProjectsResponse_ProjectInfo `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects,omitempty"` // Pagination information for the response Pagination *OffsetPaginationResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } @@ -1494,7 +1494,7 @@ func (*GroupServiceListProjectsResponse) Descriptor() ([]byte, []int) { return file_controlplane_v1_group_proto_rawDescGZIP(), []int{24} } -func (x *GroupServiceListProjectsResponse) GetProjects() []*ProjectInfo { +func (x *GroupServiceListProjectsResponse) GetProjects() []*GroupServiceListProjectsResponse_ProjectInfo { if x != nil { return x.Projects } @@ -1509,7 +1509,7 @@ func (x *GroupServiceListProjectsResponse) GetPagination() *OffsetPaginationResp } // ProjectInfo represents detailed information about a project that a group is a member of -type ProjectInfo struct { +type GroupServiceListProjectsResponse_ProjectInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1528,8 +1528,8 @@ type ProjectInfo struct { CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` } -func (x *ProjectInfo) Reset() { - *x = ProjectInfo{} +func (x *GroupServiceListProjectsResponse_ProjectInfo) Reset() { + *x = GroupServiceListProjectsResponse_ProjectInfo{} if protoimpl.UnsafeEnabled { mi := &file_controlplane_v1_group_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1537,13 +1537,13 @@ func (x *ProjectInfo) Reset() { } } -func (x *ProjectInfo) String() string { +func (x *GroupServiceListProjectsResponse_ProjectInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProjectInfo) ProtoMessage() {} +func (*GroupServiceListProjectsResponse_ProjectInfo) ProtoMessage() {} -func (x *ProjectInfo) ProtoReflect() protoreflect.Message { +func (x *GroupServiceListProjectsResponse_ProjectInfo) ProtoReflect() protoreflect.Message { mi := &file_controlplane_v1_group_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1555,47 +1555,47 @@ func (x *ProjectInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProjectInfo.ProtoReflect.Descriptor instead. -func (*ProjectInfo) Descriptor() ([]byte, []int) { - return file_controlplane_v1_group_proto_rawDescGZIP(), []int{25} +// Deprecated: Use GroupServiceListProjectsResponse_ProjectInfo.ProtoReflect.Descriptor instead. +func (*GroupServiceListProjectsResponse_ProjectInfo) Descriptor() ([]byte, []int) { + return file_controlplane_v1_group_proto_rawDescGZIP(), []int{24, 0} } -func (x *ProjectInfo) GetId() string { +func (x *GroupServiceListProjectsResponse_ProjectInfo) GetId() string { if x != nil { return x.Id } return "" } -func (x *ProjectInfo) GetName() string { +func (x *GroupServiceListProjectsResponse_ProjectInfo) GetName() string { if x != nil { return x.Name } return "" } -func (x *ProjectInfo) GetDescription() string { +func (x *GroupServiceListProjectsResponse_ProjectInfo) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *ProjectInfo) GetRole() ProjectMemberRole { +func (x *GroupServiceListProjectsResponse_ProjectInfo) GetRole() ProjectMemberRole { if x != nil { return x.Role } return ProjectMemberRole_PROJECT_MEMBER_ROLE_UNSPECIFIED } -func (x *ProjectInfo) GetLatestVersionId() string { +func (x *GroupServiceListProjectsResponse_ProjectInfo) GetLatestVersionId() string { if x != nil && x.LatestVersionId != nil { return *x.LatestVersionId } return "" } -func (x *ProjectInfo) GetCreatedAt() *timestamppb.Timestamp { +func (x *GroupServiceListProjectsResponse_ProjectInfo) GetCreatedAt() *timestamppb.Timestamp { if x != nil { return x.CreatedAt } @@ -1851,120 +1851,122 @@ var file_controlplane_v1_group_proto_rawDesc = []byte{ 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0xa7, 0x01, 0x0a, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0xd8, 0x03, 0x0a, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x49, - 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8d, 0x02, 0x0a, 0x0b, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x36, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, - 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x32, 0x86, 0x0a, 0x0a, 0x0c, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x63, 0x0a, 0x06, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x5a, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x04, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x06, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, + 0x49, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x50, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x8d, 0x02, 0x0a, 0x0b, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x36, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, + 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x32, 0x86, 0x0a, 0x0a, 0x0c, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x63, 0x0a, 0x06, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x5a, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x28, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x63, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, + 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x06, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, + 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x63, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x09, 0x41, 0x64, 0x64, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xa5, 0x01, - 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4d, 0x61, - 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x40, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x41, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4d, 0x61, 0x69, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x93, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xa5, + 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4d, + 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x40, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x41, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4d, 0x61, 0x69, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x93, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x0c, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, + 0x73, 0x12, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x42, 0x4c, 0x5a, 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x6c, 0x6f, 0x6f, 0x70, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x6c, 0x6f, 0x6f, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x76, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x0c, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x30, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0x4c, 0x5a, 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x6c, 0x6f, 0x6f, 0x70, 0x2d, 0x64, 0x65, 0x76, 0x2f, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x6c, 0x6f, 0x6f, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x76, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2006,7 +2008,7 @@ var file_controlplane_v1_group_proto_goTypes = []interface{}{ (*GroupServiceUpdateMemberMaintainerStatusResponse)(nil), // 22: controlplane.v1.GroupServiceUpdateMemberMaintainerStatusResponse (*GroupServiceListProjectsRequest)(nil), // 23: controlplane.v1.GroupServiceListProjectsRequest (*GroupServiceListProjectsResponse)(nil), // 24: controlplane.v1.GroupServiceListProjectsResponse - (*ProjectInfo)(nil), // 25: controlplane.v1.ProjectInfo + (*GroupServiceListProjectsResponse_ProjectInfo)(nil), // 25: controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo (*IdentityReference)(nil), // 26: controlplane.v1.IdentityReference (*OffsetPaginationRequest)(nil), // 27: controlplane.v1.OffsetPaginationRequest (*OffsetPaginationResponse)(nil), // 28: controlplane.v1.OffsetPaginationResponse @@ -2044,10 +2046,10 @@ var file_controlplane_v1_group_proto_depIdxs = []int32{ 26, // 26: controlplane.v1.GroupServiceUpdateMemberMaintainerStatusRequest.group_reference:type_name -> controlplane.v1.IdentityReference 26, // 27: controlplane.v1.GroupServiceListProjectsRequest.group_reference:type_name -> controlplane.v1.IdentityReference 27, // 28: controlplane.v1.GroupServiceListProjectsRequest.pagination:type_name -> controlplane.v1.OffsetPaginationRequest - 25, // 29: controlplane.v1.GroupServiceListProjectsResponse.projects:type_name -> controlplane.v1.ProjectInfo + 25, // 29: controlplane.v1.GroupServiceListProjectsResponse.projects:type_name -> controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo 28, // 30: controlplane.v1.GroupServiceListProjectsResponse.pagination:type_name -> controlplane.v1.OffsetPaginationResponse - 31, // 31: controlplane.v1.ProjectInfo.role:type_name -> controlplane.v1.ProjectMemberRole - 30, // 32: controlplane.v1.ProjectInfo.created_at:type_name -> google.protobuf.Timestamp + 31, // 31: controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.role:type_name -> controlplane.v1.ProjectMemberRole + 30, // 32: controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.created_at:type_name -> google.protobuf.Timestamp 0, // 33: controlplane.v1.GroupService.Create:input_type -> controlplane.v1.GroupServiceCreateRequest 2, // 34: controlplane.v1.GroupService.Get:input_type -> controlplane.v1.GroupServiceGetRequest 4, // 35: controlplane.v1.GroupService.List:input_type -> controlplane.v1.GroupServiceListRequest @@ -2387,7 +2389,7 @@ func file_controlplane_v1_group_proto_init() { } } file_controlplane_v1_group_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectInfo); i { + switch v := v.(*GroupServiceListProjectsResponse_ProjectInfo); i { case 0: return &v.state case 1: diff --git a/app/controlplane/api/controlplane/v1/group.proto b/app/controlplane/api/controlplane/v1/group.proto index f96b30eb4..74215d7cd 100644 --- a/app/controlplane/api/controlplane/v1/group.proto +++ b/app/controlplane/api/controlplane/v1/group.proto @@ -253,20 +253,20 @@ message GroupServiceListProjectsResponse { repeated ProjectInfo projects = 1; // Pagination information for the response OffsetPaginationResponse pagination = 2; -} -// ProjectInfo represents detailed information about a project that a group is a member of -message ProjectInfo { - // Unique identifier of the project - string id = 1; - // Name of the project - string name = 2; - // Description of the project - string description = 3; - // Role of the group in the project (admin or viewer) - ProjectMemberRole role = 4; - // The latest version ID of the project, if available - optional string latest_version_id = 5; - // Timestamp when the membership was created - google.protobuf.Timestamp created_at = 6; + // ProjectInfo represents detailed information about a project that a group is a member of + message ProjectInfo { + // Unique identifier of the project + string id = 1; + // Name of the project + string name = 2; + // Description of the project + string description = 3; + // Role of the group in the project (admin or viewer) + ProjectMemberRole role = 4; + // The latest version ID of the project, if available + optional string latest_version_id = 5; + // Timestamp when the membership was created + google.protobuf.Timestamp created_at = 6; + } } diff --git a/app/controlplane/api/gen/frontend/controlplane/v1/group.ts b/app/controlplane/api/gen/frontend/controlplane/v1/group.ts index 49462b513..dddfb7f94 100644 --- a/app/controlplane/api/gen/frontend/controlplane/v1/group.ts +++ b/app/controlplane/api/gen/frontend/controlplane/v1/group.ts @@ -227,13 +227,13 @@ export interface GroupServiceListProjectsRequest { /** GroupServiceListProjectsResponse contains a paginated list of projects for a group */ export interface GroupServiceListProjectsResponse { /** List of projects memberships matching the request criteria */ - projects: ProjectInfo[]; + projects: GroupServiceListProjectsResponse_ProjectInfo[]; /** Pagination information for the response */ pagination?: OffsetPaginationResponse; } /** ProjectInfo represents detailed information about a project that a group is a member of */ -export interface ProjectInfo { +export interface GroupServiceListProjectsResponse_ProjectInfo { /** Unique identifier of the project */ id: string; /** Name of the project */ @@ -2093,7 +2093,7 @@ function createBaseGroupServiceListProjectsResponse(): GroupServiceListProjectsR export const GroupServiceListProjectsResponse = { encode(message: GroupServiceListProjectsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { for (const v of message.projects) { - ProjectInfo.encode(v!, writer.uint32(10).fork()).ldelim(); + GroupServiceListProjectsResponse_ProjectInfo.encode(v!, writer.uint32(10).fork()).ldelim(); } if (message.pagination !== undefined) { OffsetPaginationResponse.encode(message.pagination, writer.uint32(18).fork()).ldelim(); @@ -2113,7 +2113,7 @@ export const GroupServiceListProjectsResponse = { break; } - message.projects.push(ProjectInfo.decode(reader, reader.uint32())); + message.projects.push(GroupServiceListProjectsResponse_ProjectInfo.decode(reader, reader.uint32())); continue; case 2: if (tag !== 18) { @@ -2133,7 +2133,9 @@ export const GroupServiceListProjectsResponse = { fromJSON(object: any): GroupServiceListProjectsResponse { return { - projects: Array.isArray(object?.projects) ? object.projects.map((e: any) => ProjectInfo.fromJSON(e)) : [], + projects: Array.isArray(object?.projects) + ? object.projects.map((e: any) => GroupServiceListProjectsResponse_ProjectInfo.fromJSON(e)) + : [], pagination: isSet(object.pagination) ? OffsetPaginationResponse.fromJSON(object.pagination) : undefined, }; }, @@ -2141,7 +2143,9 @@ export const GroupServiceListProjectsResponse = { toJSON(message: GroupServiceListProjectsResponse): unknown { const obj: any = {}; if (message.projects) { - obj.projects = message.projects.map((e) => e ? ProjectInfo.toJSON(e) : undefined); + obj.projects = message.projects.map((e) => + e ? GroupServiceListProjectsResponse_ProjectInfo.toJSON(e) : undefined + ); } else { obj.projects = []; } @@ -2160,7 +2164,7 @@ export const GroupServiceListProjectsResponse = { object: I, ): GroupServiceListProjectsResponse { const message = createBaseGroupServiceListProjectsResponse(); - message.projects = object.projects?.map((e) => ProjectInfo.fromPartial(e)) || []; + message.projects = object.projects?.map((e) => GroupServiceListProjectsResponse_ProjectInfo.fromPartial(e)) || []; message.pagination = (object.pagination !== undefined && object.pagination !== null) ? OffsetPaginationResponse.fromPartial(object.pagination) : undefined; @@ -2168,12 +2172,12 @@ export const GroupServiceListProjectsResponse = { }, }; -function createBaseProjectInfo(): ProjectInfo { +function createBaseGroupServiceListProjectsResponse_ProjectInfo(): GroupServiceListProjectsResponse_ProjectInfo { return { id: "", name: "", description: "", role: 0, latestVersionId: undefined, createdAt: undefined }; } -export const ProjectInfo = { - encode(message: ProjectInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { +export const GroupServiceListProjectsResponse_ProjectInfo = { + encode(message: GroupServiceListProjectsResponse_ProjectInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { if (message.id !== "") { writer.uint32(10).string(message.id); } @@ -2195,10 +2199,10 @@ export const ProjectInfo = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): ProjectInfo { + decode(input: _m0.Reader | Uint8Array, length?: number): GroupServiceListProjectsResponse_ProjectInfo { const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseProjectInfo(); + const message = createBaseGroupServiceListProjectsResponse_ProjectInfo(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -2253,7 +2257,7 @@ export const ProjectInfo = { return message; }, - fromJSON(object: any): ProjectInfo { + fromJSON(object: any): GroupServiceListProjectsResponse_ProjectInfo { return { id: isSet(object.id) ? String(object.id) : "", name: isSet(object.name) ? String(object.name) : "", @@ -2264,7 +2268,7 @@ export const ProjectInfo = { }; }, - toJSON(message: ProjectInfo): unknown { + toJSON(message: GroupServiceListProjectsResponse_ProjectInfo): unknown { const obj: any = {}; message.id !== undefined && (obj.id = message.id); message.name !== undefined && (obj.name = message.name); @@ -2275,12 +2279,16 @@ export const ProjectInfo = { return obj; }, - create, I>>(base?: I): ProjectInfo { - return ProjectInfo.fromPartial(base ?? {}); + create, I>>( + base?: I, + ): GroupServiceListProjectsResponse_ProjectInfo { + return GroupServiceListProjectsResponse_ProjectInfo.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): ProjectInfo { - const message = createBaseProjectInfo(); + fromPartial, I>>( + object: I, + ): GroupServiceListProjectsResponse_ProjectInfo { + const message = createBaseGroupServiceListProjectsResponse_ProjectInfo(); message.id = object.id ?? ""; message.name = object.name ?? ""; message.description = object.description ?? ""; diff --git a/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.jsonschema.json b/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.jsonschema.json new file mode 100644 index 000000000..4b3e9e883 --- /dev/null +++ b/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.jsonschema.json @@ -0,0 +1,59 @@ +{ + "$id": "controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.jsonschema.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "description": "ProjectInfo represents detailed information about a project that a group is a member of", + "patternProperties": { + "^(created_at)$": { + "$ref": "google.protobuf.Timestamp.jsonschema.json", + "description": "Timestamp when the membership was created" + }, + "^(latest_version_id)$": { + "description": "The latest version ID of the project, if available", + "type": "string" + } + }, + "properties": { + "createdAt": { + "$ref": "google.protobuf.Timestamp.jsonschema.json", + "description": "Timestamp when the membership was created" + }, + "description": { + "description": "Description of the project", + "type": "string" + }, + "id": { + "description": "Unique identifier of the project", + "type": "string" + }, + "latestVersionId": { + "description": "The latest version ID of the project, if available", + "type": "string" + }, + "name": { + "description": "Name of the project", + "type": "string" + }, + "role": { + "anyOf": [ + { + "enum": [ + "PROJECT_MEMBER_ROLE_UNSPECIFIED", + "PROJECT_MEMBER_ROLE_ADMIN", + "PROJECT_MEMBER_ROLE_VIEWER" + ], + "title": "Project Member Role", + "type": "string" + }, + { + "maximum": 2147483647, + "minimum": -2147483648, + "type": "integer" + } + ], + "description": "Role of the group in the project (admin or viewer)" + } + }, + "title": "Project Info", + "type": "object" +} diff --git a/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.schema.json b/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.schema.json new file mode 100644 index 000000000..2c7b9c821 --- /dev/null +++ b/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.schema.json @@ -0,0 +1,59 @@ +{ + "$id": "controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.schema.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "description": "ProjectInfo represents detailed information about a project that a group is a member of", + "patternProperties": { + "^(createdAt)$": { + "$ref": "google.protobuf.Timestamp.schema.json", + "description": "Timestamp when the membership was created" + }, + "^(latestVersionId)$": { + "description": "The latest version ID of the project, if available", + "type": "string" + } + }, + "properties": { + "created_at": { + "$ref": "google.protobuf.Timestamp.schema.json", + "description": "Timestamp when the membership was created" + }, + "description": { + "description": "Description of the project", + "type": "string" + }, + "id": { + "description": "Unique identifier of the project", + "type": "string" + }, + "latest_version_id": { + "description": "The latest version ID of the project, if available", + "type": "string" + }, + "name": { + "description": "Name of the project", + "type": "string" + }, + "role": { + "anyOf": [ + { + "enum": [ + "PROJECT_MEMBER_ROLE_UNSPECIFIED", + "PROJECT_MEMBER_ROLE_ADMIN", + "PROJECT_MEMBER_ROLE_VIEWER" + ], + "title": "Project Member Role", + "type": "string" + }, + { + "maximum": 2147483647, + "minimum": -2147483648, + "type": "integer" + } + ], + "description": "Role of the group in the project (admin or viewer)" + } + }, + "title": "Project Info", + "type": "object" +} diff --git a/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.jsonschema.json b/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.jsonschema.json index 287fd1dc5..b22b6ddce 100644 --- a/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.jsonschema.json +++ b/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.jsonschema.json @@ -11,7 +11,7 @@ "projects": { "description": "List of projects memberships matching the request criteria", "items": { - "$ref": "controlplane.v1.ProjectInfo.jsonschema.json" + "$ref": "controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.jsonschema.json" }, "type": "array" } diff --git a/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.schema.json b/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.schema.json index 15be117c9..fa0c4db80 100644 --- a/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.schema.json +++ b/app/controlplane/api/gen/jsonschema/controlplane.v1.GroupServiceListProjectsResponse.schema.json @@ -11,7 +11,7 @@ "projects": { "description": "List of projects memberships matching the request criteria", "items": { - "$ref": "controlplane.v1.ProjectInfo.schema.json" + "$ref": "controlplane.v1.GroupServiceListProjectsResponse.ProjectInfo.schema.json" }, "type": "array" } From 1a5ac763e6b70bc5789e4fdee90cb6fe5b049661 Mon Sep 17 00:00:00 2001 From: Javier Rodriguez Date: Wed, 16 Jul 2025 08:26:08 +0200 Subject: [PATCH 3/3] fix service Signed-off-by: Javier Rodriguez --- app/controlplane/internal/service/group.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controlplane/internal/service/group.go b/app/controlplane/internal/service/group.go index 3294ad7ef..0180f8f5a 100644 --- a/app/controlplane/internal/service/group.go +++ b/app/controlplane/internal/service/group.go @@ -520,7 +520,7 @@ func (g *GroupService) ListProjects(ctx context.Context, req *pb.GroupServiceLis } // Convert the GroupProjectInfo to protobuf messages - result := make([]*pb.ProjectInfo, 0, len(projectInfoList)) + result := make([]*pb.GroupServiceListProjectsResponse_ProjectInfo, 0, len(projectInfoList)) for _, project := range projectInfoList { result = append(result, bizGroupProjectInfoToPb(project)) } @@ -576,8 +576,8 @@ func bizOrgInvitationToPendingGroupInvitationPb(inv *biz.OrgInvitation) *pb.Pend } // bizGroupProjectInfoToPb converts a biz.GroupProjectInfo to a pb.ProjectInfo protobuf message. -func bizGroupProjectInfoToPb(info *biz.GroupProjectInfo) *pb.ProjectInfo { - projectInfo := &pb.ProjectInfo{ +func bizGroupProjectInfoToPb(info *biz.GroupProjectInfo) *pb.GroupServiceListProjectsResponse_ProjectInfo { + projectInfo := &pb.GroupServiceListProjectsResponse_ProjectInfo{ Id: info.ID.String(), Name: info.Name, Description: info.Description,