From 139090fb8fe23d09814c12c1d23ce6e52e5fc963 Mon Sep 17 00:00:00 2001 From: Steven Date: Sat, 27 Jul 2024 09:47:12 +0800 Subject: [PATCH] chore: fix calendar timestamps --- docs/apidocs.swagger.yaml | 66 +- proto/api/v1/memo_service.proto | 37 +- proto/gen/api/v1/memo_service.pb.go | 976 ++++++++++------------ proto/gen/api/v1/memo_service.pb.gw.go | 87 -- proto/gen/api/v1/memo_service_grpc.pb.go | 40 - server/router/api/v1/memo_service.go | 77 +- web/src/components/ActivityCalendar.tsx | 23 +- web/src/components/UserStatisticsView.tsx | 53 +- web/src/helpers/datetime.ts | 68 -- web/src/layouts/RootLayout.tsx | 7 + web/src/pages/Home.tsx | 4 + 11 files changed, 544 insertions(+), 894 deletions(-) diff --git a/docs/apidocs.swagger.yaml b/docs/apidocs.swagger.yaml index 5f501617..5f6ccc9c 100644 --- a/docs/apidocs.swagger.yaml +++ b/docs/apidocs.swagger.yaml @@ -357,42 +357,6 @@ paths: $ref: '#/definitions/v1CreateMemoRequest' tags: - MemoService - /api/v1/memos/stats: - get: - summary: GetUserMemosStats gets stats of memos for a user. - operationId: MemoService_GetUserMemosStats - responses: - "200": - description: A successful response. - schema: - $ref: '#/definitions/v1GetUserMemosStatsResponse' - default: - description: An unexpected error response. - schema: - $ref: '#/definitions/googlerpcStatus' - parameters: - - name: name - description: |- - name is the name of the user to get stats for. - Format: users/{id} - in: query - required: false - type: string - - name: timezone - description: |- - timezone location - Format: uses tz identifier - https://en.wikipedia.org/wiki/List_of_tz_database_time_zones - in: query - required: false - type: string - - name: filter - description: Same as ListMemosRequest.filter - in: query - required: false - type: string - tags: - - MemoService /api/v1/memos:by-uid/{uid}: get: summary: GetMemoByUid gets a memo by uid @@ -2417,17 +2381,6 @@ definitions: content: type: string format: byte - v1GetUserMemosStatsResponse: - type: object - properties: - stats: - type: object - additionalProperties: - type: integer - format: int32 - description: |- - stats is the stats of memo creating/updating activities. - key is the year-month-day string. e.g. "2020-01-01". v1HTMLElementNode: type: object properties: @@ -2555,11 +2508,11 @@ definitions: v1ListMemoPropertiesResponse: type: object properties: - properties: + entities: type: array items: type: object - $ref: '#/definitions/v1MemoProperty' + $ref: '#/definitions/v1MemoPropertyEntity' v1ListMemoReactionsResponse: type: object properties: @@ -2744,6 +2697,21 @@ definitions: type: boolean hasIncompleteTasks: type: boolean + v1MemoPropertyEntity: + type: object + properties: + name: + type: string + title: |- + The name of the memo property. + Format: memos/{id}/properties/{property_id} + property: + $ref: '#/definitions/v1MemoProperty' + readOnly: true + displayTime: + type: string + format: date-time + readOnly: true v1MemoRelation: type: object properties: diff --git a/proto/api/v1/memo_service.proto b/proto/api/v1/memo_service.proto index 3919d2c1..861b7b4e 100644 --- a/proto/api/v1/memo_service.proto +++ b/proto/api/v1/memo_service.proto @@ -123,11 +123,6 @@ service MemoService { option (google.api.http) = {get: "/api/v1/{name=memos/*}/comments"}; option (google.api.method_signature) = "name"; } - // GetUserMemosStats gets stats of memos for a user. - rpc GetUserMemosStats(GetUserMemosStatsRequest) returns (GetUserMemosStatsResponse) { - option (google.api.http) = {get: "/api/v1/memos/stats"}; - option (google.api.method_signature) = "username"; - } // ListMemoReactions lists reactions for a memo. rpc ListMemoReactions(ListMemoReactionsRequest) returns (ListMemoReactionsResponse) { option (google.api.http) = {get: "/api/v1/{name=memos/*}/reactions"}; @@ -281,7 +276,17 @@ message ListMemoPropertiesRequest { } message ListMemoPropertiesResponse { - repeated MemoProperty properties = 1; + repeated MemoPropertyEntity entities = 1; +} + +message MemoPropertyEntity { + // The name of the memo property. + // Format: memos/{id}/properties/{property_id} + string name = 1; + + MemoProperty property = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + + google.protobuf.Timestamp display_time = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; } message RebuildMemoPropertyRequest { @@ -377,26 +382,6 @@ message ListMemoCommentsResponse { repeated Memo memos = 1; } -message GetUserMemosStatsRequest { - // name is the name of the user to get stats for. - // Format: users/{id} - string name = 1; - - // timezone location - // Format: uses tz identifier - // https://en.wikipedia.org/wiki/List_of_tz_database_time_zones - string timezone = 2; - - // Same as ListMemosRequest.filter - string filter = 3; -} - -message GetUserMemosStatsResponse { - // stats is the stats of memo creating/updating activities. - // key is the year-month-day string. e.g. "2020-01-01". - map stats = 1; -} - message ListMemoReactionsRequest { // The name of the memo. // Format: memos/{id} diff --git a/proto/gen/api/v1/memo_service.pb.go b/proto/gen/api/v1/memo_service.pb.go index 6a4df824..aa21827c 100644 --- a/proto/gen/api/v1/memo_service.pb.go +++ b/proto/gen/api/v1/memo_service.pb.go @@ -887,7 +887,7 @@ type ListMemoPropertiesResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Properties []*MemoProperty `protobuf:"bytes,1,rep,name=properties,proto3" json:"properties,omitempty"` + Entities []*MemoPropertyEntity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` } func (x *ListMemoPropertiesResponse) Reset() { @@ -922,9 +922,74 @@ func (*ListMemoPropertiesResponse) Descriptor() ([]byte, []int) { return file_api_v1_memo_service_proto_rawDescGZIP(), []int{12} } -func (x *ListMemoPropertiesResponse) GetProperties() []*MemoProperty { +func (x *ListMemoPropertiesResponse) GetEntities() []*MemoPropertyEntity { if x != nil { - return x.Properties + return x.Entities + } + return nil +} + +type MemoPropertyEntity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The name of the memo property. + // Format: memos/{id}/properties/{property_id} + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Property *MemoProperty `protobuf:"bytes,2,opt,name=property,proto3" json:"property,omitempty"` + DisplayTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=display_time,json=displayTime,proto3" json:"display_time,omitempty"` +} + +func (x *MemoPropertyEntity) Reset() { + *x = MemoPropertyEntity{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_memo_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MemoPropertyEntity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MemoPropertyEntity) ProtoMessage() {} + +func (x *MemoPropertyEntity) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_memo_service_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MemoPropertyEntity.ProtoReflect.Descriptor instead. +func (*MemoPropertyEntity) Descriptor() ([]byte, []int) { + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{13} +} + +func (x *MemoPropertyEntity) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *MemoPropertyEntity) GetProperty() *MemoProperty { + if x != nil { + return x.Property + } + return nil +} + +func (x *MemoPropertyEntity) GetDisplayTime() *timestamppb.Timestamp { + if x != nil { + return x.DisplayTime } return nil } @@ -942,7 +1007,7 @@ type RebuildMemoPropertyRequest struct { func (x *RebuildMemoPropertyRequest) Reset() { *x = RebuildMemoPropertyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[13] + mi := &file_api_v1_memo_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -955,7 +1020,7 @@ func (x *RebuildMemoPropertyRequest) String() string { func (*RebuildMemoPropertyRequest) ProtoMessage() {} func (x *RebuildMemoPropertyRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[13] + mi := &file_api_v1_memo_service_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -968,7 +1033,7 @@ func (x *RebuildMemoPropertyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RebuildMemoPropertyRequest.ProtoReflect.Descriptor instead. func (*RebuildMemoPropertyRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{13} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{14} } func (x *RebuildMemoPropertyRequest) GetName() string { @@ -994,7 +1059,7 @@ type ListMemoTagsRequest struct { func (x *ListMemoTagsRequest) Reset() { *x = ListMemoTagsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[14] + mi := &file_api_v1_memo_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1007,7 +1072,7 @@ func (x *ListMemoTagsRequest) String() string { func (*ListMemoTagsRequest) ProtoMessage() {} func (x *ListMemoTagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[14] + mi := &file_api_v1_memo_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1020,7 +1085,7 @@ func (x *ListMemoTagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMemoTagsRequest.ProtoReflect.Descriptor instead. func (*ListMemoTagsRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{14} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{15} } func (x *ListMemoTagsRequest) GetParent() string { @@ -1051,7 +1116,7 @@ type ListMemoTagsResponse struct { func (x *ListMemoTagsResponse) Reset() { *x = ListMemoTagsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[15] + mi := &file_api_v1_memo_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1064,7 +1129,7 @@ func (x *ListMemoTagsResponse) String() string { func (*ListMemoTagsResponse) ProtoMessage() {} func (x *ListMemoTagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[15] + mi := &file_api_v1_memo_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1077,7 +1142,7 @@ func (x *ListMemoTagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMemoTagsResponse.ProtoReflect.Descriptor instead. func (*ListMemoTagsResponse) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{15} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{16} } func (x *ListMemoTagsResponse) GetTagAmounts() map[string]int32 { @@ -1102,7 +1167,7 @@ type RenameMemoTagRequest struct { func (x *RenameMemoTagRequest) Reset() { *x = RenameMemoTagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[16] + mi := &file_api_v1_memo_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1115,7 +1180,7 @@ func (x *RenameMemoTagRequest) String() string { func (*RenameMemoTagRequest) ProtoMessage() {} func (x *RenameMemoTagRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[16] + mi := &file_api_v1_memo_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1128,7 +1193,7 @@ func (x *RenameMemoTagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RenameMemoTagRequest.ProtoReflect.Descriptor instead. func (*RenameMemoTagRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{16} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{17} } func (x *RenameMemoTagRequest) GetParent() string { @@ -1167,7 +1232,7 @@ type DeleteMemoTagRequest struct { func (x *DeleteMemoTagRequest) Reset() { *x = DeleteMemoTagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[17] + mi := &file_api_v1_memo_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1180,7 +1245,7 @@ func (x *DeleteMemoTagRequest) String() string { func (*DeleteMemoTagRequest) ProtoMessage() {} func (x *DeleteMemoTagRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[17] + mi := &file_api_v1_memo_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1193,7 +1258,7 @@ func (x *DeleteMemoTagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteMemoTagRequest.ProtoReflect.Descriptor instead. func (*DeleteMemoTagRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{17} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{18} } func (x *DeleteMemoTagRequest) GetParent() string { @@ -1231,7 +1296,7 @@ type SetMemoResourcesRequest struct { func (x *SetMemoResourcesRequest) Reset() { *x = SetMemoResourcesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[18] + mi := &file_api_v1_memo_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1244,7 +1309,7 @@ func (x *SetMemoResourcesRequest) String() string { func (*SetMemoResourcesRequest) ProtoMessage() {} func (x *SetMemoResourcesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[18] + mi := &file_api_v1_memo_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1257,7 +1322,7 @@ func (x *SetMemoResourcesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMemoResourcesRequest.ProtoReflect.Descriptor instead. func (*SetMemoResourcesRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{18} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{19} } func (x *SetMemoResourcesRequest) GetName() string { @@ -1287,7 +1352,7 @@ type ListMemoResourcesRequest struct { func (x *ListMemoResourcesRequest) Reset() { *x = ListMemoResourcesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[19] + mi := &file_api_v1_memo_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1300,7 +1365,7 @@ func (x *ListMemoResourcesRequest) String() string { func (*ListMemoResourcesRequest) ProtoMessage() {} func (x *ListMemoResourcesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[19] + mi := &file_api_v1_memo_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1313,7 +1378,7 @@ func (x *ListMemoResourcesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMemoResourcesRequest.ProtoReflect.Descriptor instead. func (*ListMemoResourcesRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{19} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{20} } func (x *ListMemoResourcesRequest) GetName() string { @@ -1334,7 +1399,7 @@ type ListMemoResourcesResponse struct { func (x *ListMemoResourcesResponse) Reset() { *x = ListMemoResourcesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[20] + mi := &file_api_v1_memo_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1347,7 +1412,7 @@ func (x *ListMemoResourcesResponse) String() string { func (*ListMemoResourcesResponse) ProtoMessage() {} func (x *ListMemoResourcesResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[20] + mi := &file_api_v1_memo_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1360,7 +1425,7 @@ func (x *ListMemoResourcesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMemoResourcesResponse.ProtoReflect.Descriptor instead. func (*ListMemoResourcesResponse) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{20} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{21} } func (x *ListMemoResourcesResponse) GetResources() []*Resource { @@ -1384,7 +1449,7 @@ type SetMemoRelationsRequest struct { func (x *SetMemoRelationsRequest) Reset() { *x = SetMemoRelationsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[21] + mi := &file_api_v1_memo_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1397,7 +1462,7 @@ func (x *SetMemoRelationsRequest) String() string { func (*SetMemoRelationsRequest) ProtoMessage() {} func (x *SetMemoRelationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[21] + mi := &file_api_v1_memo_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1410,7 +1475,7 @@ func (x *SetMemoRelationsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMemoRelationsRequest.ProtoReflect.Descriptor instead. func (*SetMemoRelationsRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{21} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{22} } func (x *SetMemoRelationsRequest) GetName() string { @@ -1440,7 +1505,7 @@ type ListMemoRelationsRequest struct { func (x *ListMemoRelationsRequest) Reset() { *x = ListMemoRelationsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[22] + mi := &file_api_v1_memo_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1453,7 +1518,7 @@ func (x *ListMemoRelationsRequest) String() string { func (*ListMemoRelationsRequest) ProtoMessage() {} func (x *ListMemoRelationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[22] + mi := &file_api_v1_memo_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1466,7 +1531,7 @@ func (x *ListMemoRelationsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMemoRelationsRequest.ProtoReflect.Descriptor instead. func (*ListMemoRelationsRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{22} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{23} } func (x *ListMemoRelationsRequest) GetName() string { @@ -1487,7 +1552,7 @@ type ListMemoRelationsResponse struct { func (x *ListMemoRelationsResponse) Reset() { *x = ListMemoRelationsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[23] + mi := &file_api_v1_memo_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1500,7 +1565,7 @@ func (x *ListMemoRelationsResponse) String() string { func (*ListMemoRelationsResponse) ProtoMessage() {} func (x *ListMemoRelationsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[23] + mi := &file_api_v1_memo_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1513,7 +1578,7 @@ func (x *ListMemoRelationsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMemoRelationsResponse.ProtoReflect.Descriptor instead. func (*ListMemoRelationsResponse) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{23} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{24} } func (x *ListMemoRelationsResponse) GetRelations() []*MemoRelation { @@ -1537,7 +1602,7 @@ type CreateMemoCommentRequest struct { func (x *CreateMemoCommentRequest) Reset() { *x = CreateMemoCommentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[24] + mi := &file_api_v1_memo_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1550,7 +1615,7 @@ func (x *CreateMemoCommentRequest) String() string { func (*CreateMemoCommentRequest) ProtoMessage() {} func (x *CreateMemoCommentRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[24] + mi := &file_api_v1_memo_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1563,7 +1628,7 @@ func (x *CreateMemoCommentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateMemoCommentRequest.ProtoReflect.Descriptor instead. func (*CreateMemoCommentRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{24} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{25} } func (x *CreateMemoCommentRequest) GetName() string { @@ -1593,7 +1658,7 @@ type ListMemoCommentsRequest struct { func (x *ListMemoCommentsRequest) Reset() { *x = ListMemoCommentsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[25] + mi := &file_api_v1_memo_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1606,7 +1671,7 @@ func (x *ListMemoCommentsRequest) String() string { func (*ListMemoCommentsRequest) ProtoMessage() {} func (x *ListMemoCommentsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[25] + mi := &file_api_v1_memo_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1619,7 +1684,7 @@ func (x *ListMemoCommentsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMemoCommentsRequest.ProtoReflect.Descriptor instead. func (*ListMemoCommentsRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{25} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{26} } func (x *ListMemoCommentsRequest) GetName() string { @@ -1640,7 +1705,7 @@ type ListMemoCommentsResponse struct { func (x *ListMemoCommentsResponse) Reset() { *x = ListMemoCommentsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[26] + mi := &file_api_v1_memo_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1653,7 +1718,7 @@ func (x *ListMemoCommentsResponse) String() string { func (*ListMemoCommentsResponse) ProtoMessage() {} func (x *ListMemoCommentsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[26] + mi := &file_api_v1_memo_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1666,7 +1731,7 @@ func (x *ListMemoCommentsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMemoCommentsResponse.ProtoReflect.Descriptor instead. func (*ListMemoCommentsResponse) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{26} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{27} } func (x *ListMemoCommentsResponse) GetMemos() []*Memo { @@ -1676,124 +1741,6 @@ func (x *ListMemoCommentsResponse) GetMemos() []*Memo { return nil } -type GetUserMemosStatsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // name is the name of the user to get stats for. - // Format: users/{id} - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // timezone location - // Format: uses tz identifier - // https://en.wikipedia.org/wiki/List_of_tz_database_time_zones - Timezone string `protobuf:"bytes,2,opt,name=timezone,proto3" json:"timezone,omitempty"` - // Same as ListMemosRequest.filter - Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` -} - -func (x *GetUserMemosStatsRequest) Reset() { - *x = GetUserMemosStatsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetUserMemosStatsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetUserMemosStatsRequest) ProtoMessage() {} - -func (x *GetUserMemosStatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetUserMemosStatsRequest.ProtoReflect.Descriptor instead. -func (*GetUserMemosStatsRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{27} -} - -func (x *GetUserMemosStatsRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *GetUserMemosStatsRequest) GetTimezone() string { - if x != nil { - return x.Timezone - } - return "" -} - -func (x *GetUserMemosStatsRequest) GetFilter() string { - if x != nil { - return x.Filter - } - return "" -} - -type GetUserMemosStatsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // stats is the stats of memo creating/updating activities. - // key is the year-month-day string. e.g. "2020-01-01". - Stats map[string]int32 `protobuf:"bytes,1,rep,name=stats,proto3" json:"stats,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` -} - -func (x *GetUserMemosStatsResponse) Reset() { - *x = GetUserMemosStatsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetUserMemosStatsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetUserMemosStatsResponse) ProtoMessage() {} - -func (x *GetUserMemosStatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetUserMemosStatsResponse.ProtoReflect.Descriptor instead. -func (*GetUserMemosStatsResponse) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{28} -} - -func (x *GetUserMemosStatsResponse) GetStats() map[string]int32 { - if x != nil { - return x.Stats - } - return nil -} - type ListMemoReactionsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1807,7 +1754,7 @@ type ListMemoReactionsRequest struct { func (x *ListMemoReactionsRequest) Reset() { *x = ListMemoReactionsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[29] + mi := &file_api_v1_memo_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1820,7 +1767,7 @@ func (x *ListMemoReactionsRequest) String() string { func (*ListMemoReactionsRequest) ProtoMessage() {} func (x *ListMemoReactionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[29] + mi := &file_api_v1_memo_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1833,7 +1780,7 @@ func (x *ListMemoReactionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMemoReactionsRequest.ProtoReflect.Descriptor instead. func (*ListMemoReactionsRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{29} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{28} } func (x *ListMemoReactionsRequest) GetName() string { @@ -1854,7 +1801,7 @@ type ListMemoReactionsResponse struct { func (x *ListMemoReactionsResponse) Reset() { *x = ListMemoReactionsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[30] + mi := &file_api_v1_memo_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1867,7 +1814,7 @@ func (x *ListMemoReactionsResponse) String() string { func (*ListMemoReactionsResponse) ProtoMessage() {} func (x *ListMemoReactionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[30] + mi := &file_api_v1_memo_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1880,7 +1827,7 @@ func (x *ListMemoReactionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMemoReactionsResponse.ProtoReflect.Descriptor instead. func (*ListMemoReactionsResponse) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{30} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{29} } func (x *ListMemoReactionsResponse) GetReactions() []*Reaction { @@ -1904,7 +1851,7 @@ type UpsertMemoReactionRequest struct { func (x *UpsertMemoReactionRequest) Reset() { *x = UpsertMemoReactionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[31] + mi := &file_api_v1_memo_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1917,7 +1864,7 @@ func (x *UpsertMemoReactionRequest) String() string { func (*UpsertMemoReactionRequest) ProtoMessage() {} func (x *UpsertMemoReactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[31] + mi := &file_api_v1_memo_service_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1930,7 +1877,7 @@ func (x *UpsertMemoReactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertMemoReactionRequest.ProtoReflect.Descriptor instead. func (*UpsertMemoReactionRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{31} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{30} } func (x *UpsertMemoReactionRequest) GetName() string { @@ -1958,7 +1905,7 @@ type DeleteMemoReactionRequest struct { func (x *DeleteMemoReactionRequest) Reset() { *x = DeleteMemoReactionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_memo_service_proto_msgTypes[32] + mi := &file_api_v1_memo_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1971,7 +1918,7 @@ func (x *DeleteMemoReactionRequest) String() string { func (*DeleteMemoReactionRequest) ProtoMessage() {} func (x *DeleteMemoReactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_memo_service_proto_msgTypes[32] + mi := &file_api_v1_memo_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1984,7 +1931,7 @@ func (x *DeleteMemoReactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteMemoReactionRequest.ProtoReflect.Descriptor instead. func (*DeleteMemoReactionRequest) Descriptor() ([]byte, []int) { - return file_api_v1_memo_service_proto_rawDescGZIP(), []int{32} + return file_api_v1_memo_service_proto_rawDescGZIP(), []int{31} } func (x *DeleteMemoReactionRequest) GetReactionId() int32 { @@ -2129,12 +2076,23 @@ var file_api_v1_memo_service_proto_rawDesc = []byte{ 0x74, 0x22, 0x2f, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x58, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, + 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, - 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x30, 0x0a, 0x1a, + 0x12, 0x3c, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xab, + 0x01, 0x0a, 0x12, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, + 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 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, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, + 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x30, 0x0a, 0x1a, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x45, @@ -2210,238 +2168,213 @@ var file_api_v1_memo_service_proto_rawDesc = []byte{ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, - 0x22, 0x62, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x6f, 0x73, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x22, 0x2e, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x22, 0x9f, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x1a, 0x38, 0x0a, 0x0a, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2e, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, - 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x51, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, - 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, - 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x19, 0x55, 0x70, 0x73, - 0x65, 0x72, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, - 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3c, - 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x2a, 0x50, 0x0a, 0x0a, - 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x49, - 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, - 0x45, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x4f, 0x54, 0x45, 0x43, 0x54, 0x45, 0x44, - 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x03, 0x32, 0xc4, - 0x16, 0x0a, 0x0b, 0x4d, 0x65, 0x6d, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, - 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x2e, 0x6d, - 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, - 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, - 0x6f, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x63, 0x0a, 0x09, 0x4c, - 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x1e, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0f, 0x12, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, - 0x12, 0x62, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1c, 0x2e, 0x6d, 0x65, - 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, - 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, - 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x25, 0xda, - 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, - 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0x6f, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x42, - 0x79, 0x55, 0x69, 0x64, 0x12, 0x21, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x42, 0x79, 0x55, 0x69, 0x64, + 0x22, 0x51, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, + 0x09, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x19, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4d, 0x65, 0x6d, + 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, + 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3c, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x2a, 0x50, 0x0a, 0x0a, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, + 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0d, 0x0a, + 0x09, 0x50, 0x52, 0x4f, 0x54, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, + 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x03, 0x32, 0xb5, 0x15, 0x0a, 0x0b, 0x4d, 0x65, 0x6d, + 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x28, 0xda, 0x41, 0x03, - 0x75, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x62, 0x79, 0x2d, 0x75, 0x69, 0x64, 0x2f, - 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x7f, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, - 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x3c, 0xda, 0x41, 0x10, 0x6d, 0x65, 0x6d, - 0x6f, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x23, 0x3a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x32, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x7b, 0x6d, 0x65, 0x6d, 0x6f, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, - 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0x6c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, 0xda, - 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, - 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0x73, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, - 0x6d, 0x6f, 0x73, 0x12, 0x20, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, - 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x6d, - 0x6f, 0x73, 0x3a, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x92, 0x01, 0x0a, 0x12, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x12, 0x27, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, - 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, - 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, - 0x2f, 0x2a, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x8d, - 0x01, 0x0a, 0x13, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x28, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x6d, - 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, - 0x3a, 0x01, 0x2a, 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x3a, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x7c, - 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x54, 0x61, 0x67, 0x73, 0x12, 0x21, - 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x22, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x6d, - 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x12, 0x7c, 0x0a, 0x0d, - 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x54, 0x61, 0x67, 0x12, 0x22, 0x2e, - 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x29, 0x3a, 0x01, 0x2a, 0x32, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x74, - 0x61, 0x67, 0x73, 0x3a, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x78, 0x0a, 0x0d, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x54, 0x61, 0x67, 0x12, 0x22, 0x2e, 0x6d, 0x65, - 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x18, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x63, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x6f, 0x73, 0x12, 0x1e, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x62, 0x0a, 0x07, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1c, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x25, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0x6f, + 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x42, 0x79, 0x55, 0x69, 0x64, 0x12, 0x21, + 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x42, 0x79, 0x55, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x28, 0xda, 0x41, 0x03, 0x75, 0x69, 0x64, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x6d, + 0x6f, 0x73, 0x3a, 0x62, 0x79, 0x2d, 0x75, 0x69, 0x64, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x12, + 0x7f, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x2e, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, + 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, + 0x6d, 0x6f, 0x22, 0x3c, 0xda, 0x41, 0x10, 0x6d, 0x65, 0x6d, 0x6f, 0x2c, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x04, 0x6d, + 0x65, 0x6d, 0x6f, 0x32, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6d, 0x65, + 0x6d, 0x6f, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, + 0x12, 0x6c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, + 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x2a, - 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, - 0x74, 0x61, 0x67, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, - 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x32, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x32, 0x20, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, - 0x2a, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x95, 0x01, 0x0a, - 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x65, 0x6d, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0x73, + 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x20, 0x2e, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x78, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x65, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x12, 0x92, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, - 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2f, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, - 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, - 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, - 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x32, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x32, 0x20, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, - 0x2a, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x95, 0x01, 0x0a, - 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x65, 0x6d, - 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, - 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2f, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x88, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, - 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x6d, 0x65, 0x6d, - 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x1f, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, - 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x91, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x65, - 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, - 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2e, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, - 0x65, 0x6d, 0x6f, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, - 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0xda, 0x41, 0x08, 0x75, - 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, - 0x74, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, - 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x70, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, + 0x12, 0x28, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x22, 0x29, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, + 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x3a, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x7c, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, + 0x4d, 0x65, 0x6d, 0x6f, 0x54, 0x61, 0x67, 0x73, 0x12, 0x21, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, - 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x27, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0xda, 0x41, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6d, 0x65, + 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x6f, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, + 0x7d, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x12, 0x7c, 0x0a, 0x0d, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x4d, 0x65, 0x6d, 0x6f, 0x54, 0x61, 0x67, 0x12, 0x22, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x4d, 0x65, 0x6d, + 0x6f, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x32, 0x24, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x3a, 0x72, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x78, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, + 0x6d, 0x6f, 0x54, 0x61, 0x67, 0x12, 0x22, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x54, + 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x2a, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x2f, 0x2a, 0x7d, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x67, 0x7d, 0x12, 0x85, + 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x32, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x25, 0x3a, 0x01, 0x2a, 0x32, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, + 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x6d, + 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0xda, + 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, + 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x85, + 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x32, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x25, 0x3a, 0x01, 0x2a, 0x32, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, + 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x2e, 0x6d, + 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0xda, + 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, + 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x88, + 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x6d, + 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, + 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, + 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, - 0x2f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x89, 0x01, 0x0a, 0x12, 0x55, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x27, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x65, 0x6d, - 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x32, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x65, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, - 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x35, - 0xda, 0x41, 0x0b, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x21, 0x2a, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x42, 0xa8, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, - 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x4d, 0x65, 0x6d, 0x6f, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, - 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, - 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, - 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, - 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, - 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x91, 0x01, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, + 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0xda, + 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, + 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x95, 0x01, + 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x65, + 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x3d, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x89, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, + 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x6d, + 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, + 0x72, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x32, 0xda, + 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, + 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6d, + 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, + 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, + 0x6d, 0x6f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x35, 0xda, 0x41, 0x0b, 0x72, 0x65, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x2a, + 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, + 0x42, 0xa8, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x4d, 0x65, 0x6d, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, + 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x41, + 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, + 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, + 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x65, 0x6d, + 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -2457,7 +2390,7 @@ func file_api_v1_memo_service_proto_rawDescGZIP() []byte { } var file_api_v1_memo_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_api_v1_memo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 35) +var file_api_v1_memo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 33) var file_api_v1_memo_service_proto_goTypes = []any{ (Visibility)(0), // 0: memos.api.v1.Visibility (*Memo)(nil), // 1: memos.api.v1.Memo @@ -2473,112 +2406,109 @@ var file_api_v1_memo_service_proto_goTypes = []any{ (*ExportMemosResponse)(nil), // 11: memos.api.v1.ExportMemosResponse (*ListMemoPropertiesRequest)(nil), // 12: memos.api.v1.ListMemoPropertiesRequest (*ListMemoPropertiesResponse)(nil), // 13: memos.api.v1.ListMemoPropertiesResponse - (*RebuildMemoPropertyRequest)(nil), // 14: memos.api.v1.RebuildMemoPropertyRequest - (*ListMemoTagsRequest)(nil), // 15: memos.api.v1.ListMemoTagsRequest - (*ListMemoTagsResponse)(nil), // 16: memos.api.v1.ListMemoTagsResponse - (*RenameMemoTagRequest)(nil), // 17: memos.api.v1.RenameMemoTagRequest - (*DeleteMemoTagRequest)(nil), // 18: memos.api.v1.DeleteMemoTagRequest - (*SetMemoResourcesRequest)(nil), // 19: memos.api.v1.SetMemoResourcesRequest - (*ListMemoResourcesRequest)(nil), // 20: memos.api.v1.ListMemoResourcesRequest - (*ListMemoResourcesResponse)(nil), // 21: memos.api.v1.ListMemoResourcesResponse - (*SetMemoRelationsRequest)(nil), // 22: memos.api.v1.SetMemoRelationsRequest - (*ListMemoRelationsRequest)(nil), // 23: memos.api.v1.ListMemoRelationsRequest - (*ListMemoRelationsResponse)(nil), // 24: memos.api.v1.ListMemoRelationsResponse - (*CreateMemoCommentRequest)(nil), // 25: memos.api.v1.CreateMemoCommentRequest - (*ListMemoCommentsRequest)(nil), // 26: memos.api.v1.ListMemoCommentsRequest - (*ListMemoCommentsResponse)(nil), // 27: memos.api.v1.ListMemoCommentsResponse - (*GetUserMemosStatsRequest)(nil), // 28: memos.api.v1.GetUserMemosStatsRequest - (*GetUserMemosStatsResponse)(nil), // 29: memos.api.v1.GetUserMemosStatsResponse - (*ListMemoReactionsRequest)(nil), // 30: memos.api.v1.ListMemoReactionsRequest - (*ListMemoReactionsResponse)(nil), // 31: memos.api.v1.ListMemoReactionsResponse - (*UpsertMemoReactionRequest)(nil), // 32: memos.api.v1.UpsertMemoReactionRequest - (*DeleteMemoReactionRequest)(nil), // 33: memos.api.v1.DeleteMemoReactionRequest - nil, // 34: memos.api.v1.ListMemoTagsResponse.TagAmountsEntry - nil, // 35: memos.api.v1.GetUserMemosStatsResponse.StatsEntry - (RowStatus)(0), // 36: memos.api.v1.RowStatus - (*timestamppb.Timestamp)(nil), // 37: google.protobuf.Timestamp - (*Node)(nil), // 38: memos.api.v1.Node - (*Resource)(nil), // 39: memos.api.v1.Resource - (*MemoRelation)(nil), // 40: memos.api.v1.MemoRelation - (*Reaction)(nil), // 41: memos.api.v1.Reaction - (*fieldmaskpb.FieldMask)(nil), // 42: google.protobuf.FieldMask - (*emptypb.Empty)(nil), // 43: google.protobuf.Empty + (*MemoPropertyEntity)(nil), // 14: memos.api.v1.MemoPropertyEntity + (*RebuildMemoPropertyRequest)(nil), // 15: memos.api.v1.RebuildMemoPropertyRequest + (*ListMemoTagsRequest)(nil), // 16: memos.api.v1.ListMemoTagsRequest + (*ListMemoTagsResponse)(nil), // 17: memos.api.v1.ListMemoTagsResponse + (*RenameMemoTagRequest)(nil), // 18: memos.api.v1.RenameMemoTagRequest + (*DeleteMemoTagRequest)(nil), // 19: memos.api.v1.DeleteMemoTagRequest + (*SetMemoResourcesRequest)(nil), // 20: memos.api.v1.SetMemoResourcesRequest + (*ListMemoResourcesRequest)(nil), // 21: memos.api.v1.ListMemoResourcesRequest + (*ListMemoResourcesResponse)(nil), // 22: memos.api.v1.ListMemoResourcesResponse + (*SetMemoRelationsRequest)(nil), // 23: memos.api.v1.SetMemoRelationsRequest + (*ListMemoRelationsRequest)(nil), // 24: memos.api.v1.ListMemoRelationsRequest + (*ListMemoRelationsResponse)(nil), // 25: memos.api.v1.ListMemoRelationsResponse + (*CreateMemoCommentRequest)(nil), // 26: memos.api.v1.CreateMemoCommentRequest + (*ListMemoCommentsRequest)(nil), // 27: memos.api.v1.ListMemoCommentsRequest + (*ListMemoCommentsResponse)(nil), // 28: memos.api.v1.ListMemoCommentsResponse + (*ListMemoReactionsRequest)(nil), // 29: memos.api.v1.ListMemoReactionsRequest + (*ListMemoReactionsResponse)(nil), // 30: memos.api.v1.ListMemoReactionsResponse + (*UpsertMemoReactionRequest)(nil), // 31: memos.api.v1.UpsertMemoReactionRequest + (*DeleteMemoReactionRequest)(nil), // 32: memos.api.v1.DeleteMemoReactionRequest + nil, // 33: memos.api.v1.ListMemoTagsResponse.TagAmountsEntry + (RowStatus)(0), // 34: memos.api.v1.RowStatus + (*timestamppb.Timestamp)(nil), // 35: google.protobuf.Timestamp + (*Node)(nil), // 36: memos.api.v1.Node + (*Resource)(nil), // 37: memos.api.v1.Resource + (*MemoRelation)(nil), // 38: memos.api.v1.MemoRelation + (*Reaction)(nil), // 39: memos.api.v1.Reaction + (*fieldmaskpb.FieldMask)(nil), // 40: google.protobuf.FieldMask + (*emptypb.Empty)(nil), // 41: google.protobuf.Empty } var file_api_v1_memo_service_proto_depIdxs = []int32{ - 36, // 0: memos.api.v1.Memo.row_status:type_name -> memos.api.v1.RowStatus - 37, // 1: memos.api.v1.Memo.create_time:type_name -> google.protobuf.Timestamp - 37, // 2: memos.api.v1.Memo.update_time:type_name -> google.protobuf.Timestamp - 37, // 3: memos.api.v1.Memo.display_time:type_name -> google.protobuf.Timestamp - 38, // 4: memos.api.v1.Memo.nodes:type_name -> memos.api.v1.Node + 34, // 0: memos.api.v1.Memo.row_status:type_name -> memos.api.v1.RowStatus + 35, // 1: memos.api.v1.Memo.create_time:type_name -> google.protobuf.Timestamp + 35, // 2: memos.api.v1.Memo.update_time:type_name -> google.protobuf.Timestamp + 35, // 3: memos.api.v1.Memo.display_time:type_name -> google.protobuf.Timestamp + 36, // 4: memos.api.v1.Memo.nodes:type_name -> memos.api.v1.Node 0, // 5: memos.api.v1.Memo.visibility:type_name -> memos.api.v1.Visibility - 39, // 6: memos.api.v1.Memo.resources:type_name -> memos.api.v1.Resource - 40, // 7: memos.api.v1.Memo.relations:type_name -> memos.api.v1.MemoRelation - 41, // 8: memos.api.v1.Memo.reactions:type_name -> memos.api.v1.Reaction + 37, // 6: memos.api.v1.Memo.resources:type_name -> memos.api.v1.Resource + 38, // 7: memos.api.v1.Memo.relations:type_name -> memos.api.v1.MemoRelation + 39, // 8: memos.api.v1.Memo.reactions:type_name -> memos.api.v1.Reaction 2, // 9: memos.api.v1.Memo.property:type_name -> memos.api.v1.MemoProperty 0, // 10: memos.api.v1.CreateMemoRequest.visibility:type_name -> memos.api.v1.Visibility 1, // 11: memos.api.v1.ListMemosResponse.memos:type_name -> memos.api.v1.Memo 1, // 12: memos.api.v1.UpdateMemoRequest.memo:type_name -> memos.api.v1.Memo - 42, // 13: memos.api.v1.UpdateMemoRequest.update_mask:type_name -> google.protobuf.FieldMask - 2, // 14: memos.api.v1.ListMemoPropertiesResponse.properties:type_name -> memos.api.v1.MemoProperty - 34, // 15: memos.api.v1.ListMemoTagsResponse.tag_amounts:type_name -> memos.api.v1.ListMemoTagsResponse.TagAmountsEntry - 39, // 16: memos.api.v1.SetMemoResourcesRequest.resources:type_name -> memos.api.v1.Resource - 39, // 17: memos.api.v1.ListMemoResourcesResponse.resources:type_name -> memos.api.v1.Resource - 40, // 18: memos.api.v1.SetMemoRelationsRequest.relations:type_name -> memos.api.v1.MemoRelation - 40, // 19: memos.api.v1.ListMemoRelationsResponse.relations:type_name -> memos.api.v1.MemoRelation - 3, // 20: memos.api.v1.CreateMemoCommentRequest.comment:type_name -> memos.api.v1.CreateMemoRequest - 1, // 21: memos.api.v1.ListMemoCommentsResponse.memos:type_name -> memos.api.v1.Memo - 35, // 22: memos.api.v1.GetUserMemosStatsResponse.stats:type_name -> memos.api.v1.GetUserMemosStatsResponse.StatsEntry - 41, // 23: memos.api.v1.ListMemoReactionsResponse.reactions:type_name -> memos.api.v1.Reaction - 41, // 24: memos.api.v1.UpsertMemoReactionRequest.reaction:type_name -> memos.api.v1.Reaction - 3, // 25: memos.api.v1.MemoService.CreateMemo:input_type -> memos.api.v1.CreateMemoRequest - 4, // 26: memos.api.v1.MemoService.ListMemos:input_type -> memos.api.v1.ListMemosRequest - 6, // 27: memos.api.v1.MemoService.GetMemo:input_type -> memos.api.v1.GetMemoRequest - 7, // 28: memos.api.v1.MemoService.GetMemoByUid:input_type -> memos.api.v1.GetMemoByUidRequest - 8, // 29: memos.api.v1.MemoService.UpdateMemo:input_type -> memos.api.v1.UpdateMemoRequest - 9, // 30: memos.api.v1.MemoService.DeleteMemo:input_type -> memos.api.v1.DeleteMemoRequest - 10, // 31: memos.api.v1.MemoService.ExportMemos:input_type -> memos.api.v1.ExportMemosRequest - 12, // 32: memos.api.v1.MemoService.ListMemoProperties:input_type -> memos.api.v1.ListMemoPropertiesRequest - 14, // 33: memos.api.v1.MemoService.RebuildMemoProperty:input_type -> memos.api.v1.RebuildMemoPropertyRequest - 15, // 34: memos.api.v1.MemoService.ListMemoTags:input_type -> memos.api.v1.ListMemoTagsRequest - 17, // 35: memos.api.v1.MemoService.RenameMemoTag:input_type -> memos.api.v1.RenameMemoTagRequest - 18, // 36: memos.api.v1.MemoService.DeleteMemoTag:input_type -> memos.api.v1.DeleteMemoTagRequest - 19, // 37: memos.api.v1.MemoService.SetMemoResources:input_type -> memos.api.v1.SetMemoResourcesRequest - 20, // 38: memos.api.v1.MemoService.ListMemoResources:input_type -> memos.api.v1.ListMemoResourcesRequest - 22, // 39: memos.api.v1.MemoService.SetMemoRelations:input_type -> memos.api.v1.SetMemoRelationsRequest - 23, // 40: memos.api.v1.MemoService.ListMemoRelations:input_type -> memos.api.v1.ListMemoRelationsRequest - 25, // 41: memos.api.v1.MemoService.CreateMemoComment:input_type -> memos.api.v1.CreateMemoCommentRequest - 26, // 42: memos.api.v1.MemoService.ListMemoComments:input_type -> memos.api.v1.ListMemoCommentsRequest - 28, // 43: memos.api.v1.MemoService.GetUserMemosStats:input_type -> memos.api.v1.GetUserMemosStatsRequest - 30, // 44: memos.api.v1.MemoService.ListMemoReactions:input_type -> memos.api.v1.ListMemoReactionsRequest - 32, // 45: memos.api.v1.MemoService.UpsertMemoReaction:input_type -> memos.api.v1.UpsertMemoReactionRequest - 33, // 46: memos.api.v1.MemoService.DeleteMemoReaction:input_type -> memos.api.v1.DeleteMemoReactionRequest + 40, // 13: memos.api.v1.UpdateMemoRequest.update_mask:type_name -> google.protobuf.FieldMask + 14, // 14: memos.api.v1.ListMemoPropertiesResponse.entities:type_name -> memos.api.v1.MemoPropertyEntity + 2, // 15: memos.api.v1.MemoPropertyEntity.property:type_name -> memos.api.v1.MemoProperty + 35, // 16: memos.api.v1.MemoPropertyEntity.display_time:type_name -> google.protobuf.Timestamp + 33, // 17: memos.api.v1.ListMemoTagsResponse.tag_amounts:type_name -> memos.api.v1.ListMemoTagsResponse.TagAmountsEntry + 37, // 18: memos.api.v1.SetMemoResourcesRequest.resources:type_name -> memos.api.v1.Resource + 37, // 19: memos.api.v1.ListMemoResourcesResponse.resources:type_name -> memos.api.v1.Resource + 38, // 20: memos.api.v1.SetMemoRelationsRequest.relations:type_name -> memos.api.v1.MemoRelation + 38, // 21: memos.api.v1.ListMemoRelationsResponse.relations:type_name -> memos.api.v1.MemoRelation + 3, // 22: memos.api.v1.CreateMemoCommentRequest.comment:type_name -> memos.api.v1.CreateMemoRequest + 1, // 23: memos.api.v1.ListMemoCommentsResponse.memos:type_name -> memos.api.v1.Memo + 39, // 24: memos.api.v1.ListMemoReactionsResponse.reactions:type_name -> memos.api.v1.Reaction + 39, // 25: memos.api.v1.UpsertMemoReactionRequest.reaction:type_name -> memos.api.v1.Reaction + 3, // 26: memos.api.v1.MemoService.CreateMemo:input_type -> memos.api.v1.CreateMemoRequest + 4, // 27: memos.api.v1.MemoService.ListMemos:input_type -> memos.api.v1.ListMemosRequest + 6, // 28: memos.api.v1.MemoService.GetMemo:input_type -> memos.api.v1.GetMemoRequest + 7, // 29: memos.api.v1.MemoService.GetMemoByUid:input_type -> memos.api.v1.GetMemoByUidRequest + 8, // 30: memos.api.v1.MemoService.UpdateMemo:input_type -> memos.api.v1.UpdateMemoRequest + 9, // 31: memos.api.v1.MemoService.DeleteMemo:input_type -> memos.api.v1.DeleteMemoRequest + 10, // 32: memos.api.v1.MemoService.ExportMemos:input_type -> memos.api.v1.ExportMemosRequest + 12, // 33: memos.api.v1.MemoService.ListMemoProperties:input_type -> memos.api.v1.ListMemoPropertiesRequest + 15, // 34: memos.api.v1.MemoService.RebuildMemoProperty:input_type -> memos.api.v1.RebuildMemoPropertyRequest + 16, // 35: memos.api.v1.MemoService.ListMemoTags:input_type -> memos.api.v1.ListMemoTagsRequest + 18, // 36: memos.api.v1.MemoService.RenameMemoTag:input_type -> memos.api.v1.RenameMemoTagRequest + 19, // 37: memos.api.v1.MemoService.DeleteMemoTag:input_type -> memos.api.v1.DeleteMemoTagRequest + 20, // 38: memos.api.v1.MemoService.SetMemoResources:input_type -> memos.api.v1.SetMemoResourcesRequest + 21, // 39: memos.api.v1.MemoService.ListMemoResources:input_type -> memos.api.v1.ListMemoResourcesRequest + 23, // 40: memos.api.v1.MemoService.SetMemoRelations:input_type -> memos.api.v1.SetMemoRelationsRequest + 24, // 41: memos.api.v1.MemoService.ListMemoRelations:input_type -> memos.api.v1.ListMemoRelationsRequest + 26, // 42: memos.api.v1.MemoService.CreateMemoComment:input_type -> memos.api.v1.CreateMemoCommentRequest + 27, // 43: memos.api.v1.MemoService.ListMemoComments:input_type -> memos.api.v1.ListMemoCommentsRequest + 29, // 44: memos.api.v1.MemoService.ListMemoReactions:input_type -> memos.api.v1.ListMemoReactionsRequest + 31, // 45: memos.api.v1.MemoService.UpsertMemoReaction:input_type -> memos.api.v1.UpsertMemoReactionRequest + 32, // 46: memos.api.v1.MemoService.DeleteMemoReaction:input_type -> memos.api.v1.DeleteMemoReactionRequest 1, // 47: memos.api.v1.MemoService.CreateMemo:output_type -> memos.api.v1.Memo 5, // 48: memos.api.v1.MemoService.ListMemos:output_type -> memos.api.v1.ListMemosResponse 1, // 49: memos.api.v1.MemoService.GetMemo:output_type -> memos.api.v1.Memo 1, // 50: memos.api.v1.MemoService.GetMemoByUid:output_type -> memos.api.v1.Memo 1, // 51: memos.api.v1.MemoService.UpdateMemo:output_type -> memos.api.v1.Memo - 43, // 52: memos.api.v1.MemoService.DeleteMemo:output_type -> google.protobuf.Empty + 41, // 52: memos.api.v1.MemoService.DeleteMemo:output_type -> google.protobuf.Empty 11, // 53: memos.api.v1.MemoService.ExportMemos:output_type -> memos.api.v1.ExportMemosResponse 13, // 54: memos.api.v1.MemoService.ListMemoProperties:output_type -> memos.api.v1.ListMemoPropertiesResponse - 43, // 55: memos.api.v1.MemoService.RebuildMemoProperty:output_type -> google.protobuf.Empty - 16, // 56: memos.api.v1.MemoService.ListMemoTags:output_type -> memos.api.v1.ListMemoTagsResponse - 43, // 57: memos.api.v1.MemoService.RenameMemoTag:output_type -> google.protobuf.Empty - 43, // 58: memos.api.v1.MemoService.DeleteMemoTag:output_type -> google.protobuf.Empty - 43, // 59: memos.api.v1.MemoService.SetMemoResources:output_type -> google.protobuf.Empty - 21, // 60: memos.api.v1.MemoService.ListMemoResources:output_type -> memos.api.v1.ListMemoResourcesResponse - 43, // 61: memos.api.v1.MemoService.SetMemoRelations:output_type -> google.protobuf.Empty - 24, // 62: memos.api.v1.MemoService.ListMemoRelations:output_type -> memos.api.v1.ListMemoRelationsResponse + 41, // 55: memos.api.v1.MemoService.RebuildMemoProperty:output_type -> google.protobuf.Empty + 17, // 56: memos.api.v1.MemoService.ListMemoTags:output_type -> memos.api.v1.ListMemoTagsResponse + 41, // 57: memos.api.v1.MemoService.RenameMemoTag:output_type -> google.protobuf.Empty + 41, // 58: memos.api.v1.MemoService.DeleteMemoTag:output_type -> google.protobuf.Empty + 41, // 59: memos.api.v1.MemoService.SetMemoResources:output_type -> google.protobuf.Empty + 22, // 60: memos.api.v1.MemoService.ListMemoResources:output_type -> memos.api.v1.ListMemoResourcesResponse + 41, // 61: memos.api.v1.MemoService.SetMemoRelations:output_type -> google.protobuf.Empty + 25, // 62: memos.api.v1.MemoService.ListMemoRelations:output_type -> memos.api.v1.ListMemoRelationsResponse 1, // 63: memos.api.v1.MemoService.CreateMemoComment:output_type -> memos.api.v1.Memo - 27, // 64: memos.api.v1.MemoService.ListMemoComments:output_type -> memos.api.v1.ListMemoCommentsResponse - 29, // 65: memos.api.v1.MemoService.GetUserMemosStats:output_type -> memos.api.v1.GetUserMemosStatsResponse - 31, // 66: memos.api.v1.MemoService.ListMemoReactions:output_type -> memos.api.v1.ListMemoReactionsResponse - 41, // 67: memos.api.v1.MemoService.UpsertMemoReaction:output_type -> memos.api.v1.Reaction - 43, // 68: memos.api.v1.MemoService.DeleteMemoReaction:output_type -> google.protobuf.Empty - 47, // [47:69] is the sub-list for method output_type - 25, // [25:47] is the sub-list for method input_type - 25, // [25:25] is the sub-list for extension type_name - 25, // [25:25] is the sub-list for extension extendee - 0, // [0:25] is the sub-list for field type_name + 28, // 64: memos.api.v1.MemoService.ListMemoComments:output_type -> memos.api.v1.ListMemoCommentsResponse + 30, // 65: memos.api.v1.MemoService.ListMemoReactions:output_type -> memos.api.v1.ListMemoReactionsResponse + 39, // 66: memos.api.v1.MemoService.UpsertMemoReaction:output_type -> memos.api.v1.Reaction + 41, // 67: memos.api.v1.MemoService.DeleteMemoReaction:output_type -> google.protobuf.Empty + 47, // [47:68] is the sub-list for method output_type + 26, // [26:47] is the sub-list for method input_type + 26, // [26:26] is the sub-list for extension type_name + 26, // [26:26] is the sub-list for extension extendee + 0, // [0:26] is the sub-list for field type_name } func init() { file_api_v1_memo_service_proto_init() } @@ -2749,7 +2679,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*RebuildMemoPropertyRequest); i { + switch v := v.(*MemoPropertyEntity); i { case 0: return &v.state case 1: @@ -2761,7 +2691,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*ListMemoTagsRequest); i { + switch v := v.(*RebuildMemoPropertyRequest); i { case 0: return &v.state case 1: @@ -2773,7 +2703,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*ListMemoTagsResponse); i { + switch v := v.(*ListMemoTagsRequest); i { case 0: return &v.state case 1: @@ -2785,7 +2715,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*RenameMemoTagRequest); i { + switch v := v.(*ListMemoTagsResponse); i { case 0: return &v.state case 1: @@ -2797,7 +2727,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*DeleteMemoTagRequest); i { + switch v := v.(*RenameMemoTagRequest); i { case 0: return &v.state case 1: @@ -2809,7 +2739,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*SetMemoResourcesRequest); i { + switch v := v.(*DeleteMemoTagRequest); i { case 0: return &v.state case 1: @@ -2821,7 +2751,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*ListMemoResourcesRequest); i { + switch v := v.(*SetMemoResourcesRequest); i { case 0: return &v.state case 1: @@ -2833,7 +2763,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*ListMemoResourcesResponse); i { + switch v := v.(*ListMemoResourcesRequest); i { case 0: return &v.state case 1: @@ -2845,7 +2775,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*SetMemoRelationsRequest); i { + switch v := v.(*ListMemoResourcesResponse); i { case 0: return &v.state case 1: @@ -2857,7 +2787,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*ListMemoRelationsRequest); i { + switch v := v.(*SetMemoRelationsRequest); i { case 0: return &v.state case 1: @@ -2869,7 +2799,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*ListMemoRelationsResponse); i { + switch v := v.(*ListMemoRelationsRequest); i { case 0: return &v.state case 1: @@ -2881,7 +2811,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*CreateMemoCommentRequest); i { + switch v := v.(*ListMemoRelationsResponse); i { case 0: return &v.state case 1: @@ -2893,7 +2823,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*ListMemoCommentsRequest); i { + switch v := v.(*CreateMemoCommentRequest); i { case 0: return &v.state case 1: @@ -2905,7 +2835,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*ListMemoCommentsResponse); i { + switch v := v.(*ListMemoCommentsRequest); i { case 0: return &v.state case 1: @@ -2917,7 +2847,7 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*GetUserMemosStatsRequest); i { + switch v := v.(*ListMemoCommentsResponse); i { case 0: return &v.state case 1: @@ -2929,18 +2859,6 @@ func file_api_v1_memo_service_proto_init() { } } file_api_v1_memo_service_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*GetUserMemosStatsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_v1_memo_service_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*ListMemoReactionsRequest); i { case 0: return &v.state @@ -2952,7 +2870,7 @@ func file_api_v1_memo_service_proto_init() { return nil } } - file_api_v1_memo_service_proto_msgTypes[30].Exporter = func(v any, i int) any { + file_api_v1_memo_service_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*ListMemoReactionsResponse); i { case 0: return &v.state @@ -2964,7 +2882,7 @@ func file_api_v1_memo_service_proto_init() { return nil } } - file_api_v1_memo_service_proto_msgTypes[31].Exporter = func(v any, i int) any { + file_api_v1_memo_service_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*UpsertMemoReactionRequest); i { case 0: return &v.state @@ -2976,7 +2894,7 @@ func file_api_v1_memo_service_proto_init() { return nil } } - file_api_v1_memo_service_proto_msgTypes[32].Exporter = func(v any, i int) any { + file_api_v1_memo_service_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*DeleteMemoReactionRequest); i { case 0: return &v.state @@ -2996,7 +2914,7 @@ func file_api_v1_memo_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_v1_memo_service_proto_rawDesc, NumEnums: 1, - NumMessages: 35, + NumMessages: 33, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/gen/api/v1/memo_service.pb.gw.go b/proto/gen/api/v1/memo_service.pb.gw.go index 506c7cb2..dc227037 100644 --- a/proto/gen/api/v1/memo_service.pb.gw.go +++ b/proto/gen/api/v1/memo_service.pb.gw.go @@ -1043,42 +1043,6 @@ func local_request_MemoService_ListMemoComments_0(ctx context.Context, marshaler } -var ( - filter_MemoService_GetUserMemosStats_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_MemoService_GetUserMemosStats_0(ctx context.Context, marshaler runtime.Marshaler, client MemoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetUserMemosStatsRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_MemoService_GetUserMemosStats_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetUserMemosStats(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_MemoService_GetUserMemosStats_0(ctx context.Context, marshaler runtime.Marshaler, server MemoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetUserMemosStatsRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_MemoService_GetUserMemosStats_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.GetUserMemosStats(ctx, &protoReq) - return msg, metadata, err - -} - func request_MemoService_ListMemoReactions_0(ctx context.Context, marshaler runtime.Marshaler, client MemoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ListMemoReactionsRequest var metadata runtime.ServerMetadata @@ -1699,31 +1663,6 @@ func RegisterMemoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux }) - mux.Handle("GET", pattern_MemoService_GetUserMemosStats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/memos.api.v1.MemoService/GetUserMemosStats", runtime.WithHTTPPathPattern("/api/v1/memos/stats")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_MemoService_GetUserMemosStats_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_MemoService_GetUserMemosStats_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_MemoService_ListMemoReactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2236,28 +2175,6 @@ func RegisterMemoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux }) - mux.Handle("GET", pattern_MemoService_GetUserMemosStats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/memos.api.v1.MemoService/GetUserMemosStats", runtime.WithHTTPPathPattern("/api/v1/memos/stats")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_MemoService_GetUserMemosStats_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_MemoService_GetUserMemosStats_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_MemoService_ListMemoReactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2364,8 +2281,6 @@ var ( pattern_MemoService_ListMemoComments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 2, 5, 3, 2, 4}, []string{"api", "v1", "memos", "name", "comments"}, "")) - pattern_MemoService_GetUserMemosStats_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "memos", "stats"}, "")) - pattern_MemoService_ListMemoReactions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 2, 5, 3, 2, 4}, []string{"api", "v1", "memos", "name", "reactions"}, "")) pattern_MemoService_UpsertMemoReaction_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 2, 5, 3, 2, 4}, []string{"api", "v1", "memos", "name", "reactions"}, "")) @@ -2410,8 +2325,6 @@ var ( forward_MemoService_ListMemoComments_0 = runtime.ForwardResponseMessage - forward_MemoService_GetUserMemosStats_0 = runtime.ForwardResponseMessage - forward_MemoService_ListMemoReactions_0 = runtime.ForwardResponseMessage forward_MemoService_UpsertMemoReaction_0 = runtime.ForwardResponseMessage diff --git a/proto/gen/api/v1/memo_service_grpc.pb.go b/proto/gen/api/v1/memo_service_grpc.pb.go index 4484941a..badbaa36 100644 --- a/proto/gen/api/v1/memo_service_grpc.pb.go +++ b/proto/gen/api/v1/memo_service_grpc.pb.go @@ -38,7 +38,6 @@ const ( MemoService_ListMemoRelations_FullMethodName = "/memos.api.v1.MemoService/ListMemoRelations" MemoService_CreateMemoComment_FullMethodName = "/memos.api.v1.MemoService/CreateMemoComment" MemoService_ListMemoComments_FullMethodName = "/memos.api.v1.MemoService/ListMemoComments" - MemoService_GetUserMemosStats_FullMethodName = "/memos.api.v1.MemoService/GetUserMemosStats" MemoService_ListMemoReactions_FullMethodName = "/memos.api.v1.MemoService/ListMemoReactions" MemoService_UpsertMemoReaction_FullMethodName = "/memos.api.v1.MemoService/UpsertMemoReaction" MemoService_DeleteMemoReaction_FullMethodName = "/memos.api.v1.MemoService/DeleteMemoReaction" @@ -84,8 +83,6 @@ type MemoServiceClient interface { CreateMemoComment(ctx context.Context, in *CreateMemoCommentRequest, opts ...grpc.CallOption) (*Memo, error) // ListMemoComments lists comments for a memo. ListMemoComments(ctx context.Context, in *ListMemoCommentsRequest, opts ...grpc.CallOption) (*ListMemoCommentsResponse, error) - // GetUserMemosStats gets stats of memos for a user. - GetUserMemosStats(ctx context.Context, in *GetUserMemosStatsRequest, opts ...grpc.CallOption) (*GetUserMemosStatsResponse, error) // ListMemoReactions lists reactions for a memo. ListMemoReactions(ctx context.Context, in *ListMemoReactionsRequest, opts ...grpc.CallOption) (*ListMemoReactionsResponse, error) // UpsertMemoReaction upserts a reaction for a memo. @@ -282,16 +279,6 @@ func (c *memoServiceClient) ListMemoComments(ctx context.Context, in *ListMemoCo return out, nil } -func (c *memoServiceClient) GetUserMemosStats(ctx context.Context, in *GetUserMemosStatsRequest, opts ...grpc.CallOption) (*GetUserMemosStatsResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(GetUserMemosStatsResponse) - err := c.cc.Invoke(ctx, MemoService_GetUserMemosStats_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *memoServiceClient) ListMemoReactions(ctx context.Context, in *ListMemoReactionsRequest, opts ...grpc.CallOption) (*ListMemoReactionsResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ListMemoReactionsResponse) @@ -362,8 +349,6 @@ type MemoServiceServer interface { CreateMemoComment(context.Context, *CreateMemoCommentRequest) (*Memo, error) // ListMemoComments lists comments for a memo. ListMemoComments(context.Context, *ListMemoCommentsRequest) (*ListMemoCommentsResponse, error) - // GetUserMemosStats gets stats of memos for a user. - GetUserMemosStats(context.Context, *GetUserMemosStatsRequest) (*GetUserMemosStatsResponse, error) // ListMemoReactions lists reactions for a memo. ListMemoReactions(context.Context, *ListMemoReactionsRequest) (*ListMemoReactionsResponse, error) // UpsertMemoReaction upserts a reaction for a memo. @@ -431,9 +416,6 @@ func (UnimplementedMemoServiceServer) CreateMemoComment(context.Context, *Create func (UnimplementedMemoServiceServer) ListMemoComments(context.Context, *ListMemoCommentsRequest) (*ListMemoCommentsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListMemoComments not implemented") } -func (UnimplementedMemoServiceServer) GetUserMemosStats(context.Context, *GetUserMemosStatsRequest) (*GetUserMemosStatsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetUserMemosStats not implemented") -} func (UnimplementedMemoServiceServer) ListMemoReactions(context.Context, *ListMemoReactionsRequest) (*ListMemoReactionsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListMemoReactions not implemented") } @@ -780,24 +762,6 @@ func _MemoService_ListMemoComments_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } -func _MemoService_GetUserMemosStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetUserMemosStatsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MemoServiceServer).GetUserMemosStats(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: MemoService_GetUserMemosStats_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MemoServiceServer).GetUserMemosStats(ctx, req.(*GetUserMemosStatsRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _MemoService_ListMemoReactions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListMemoReactionsRequest) if err := dec(in); err != nil { @@ -931,10 +895,6 @@ var MemoService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListMemoComments", Handler: _MemoService_ListMemoComments_Handler, }, - { - MethodName: "GetUserMemosStats", - Handler: _MemoService_GetUserMemosStats_Handler, - }, { MethodName: "ListMemoReactions", Handler: _MemoService_ListMemoReactions_Handler, diff --git a/server/router/api/v1/memo_service.go b/server/router/api/v1/memo_service.go index 24b9ff75..5a7a5c57 100644 --- a/server/router/api/v1/memo_service.go +++ b/server/router/api/v1/memo_service.go @@ -491,61 +491,6 @@ func (s *APIV1Service) ListMemoComments(ctx context.Context, request *v1pb.ListM return response, nil } -func (s *APIV1Service) GetUserMemosStats(ctx context.Context, request *v1pb.GetUserMemosStatsRequest) (*v1pb.GetUserMemosStatsResponse, error) { - userID, err := ExtractUserIDFromName(request.Name) - if err != nil { - return nil, errors.Wrap(err, "invalid user name") - } - user, err := s.Store.GetUser(ctx, &store.FindUser{ - ID: &userID, - }) - if err != nil { - return nil, status.Errorf(codes.Internal, "failed to get user") - } - if user == nil { - return nil, status.Errorf(codes.NotFound, "user not found") - } - - normalRowStatus := store.Normal - memoFind := &store.FindMemo{ - CreatorID: &user.ID, - RowStatus: &normalRowStatus, - ExcludeComments: true, - ExcludeContent: true, - } - if err := s.buildMemoFindWithFilter(ctx, memoFind, request.Filter); err != nil { - return nil, status.Errorf(codes.InvalidArgument, "failed to build find memos with filter") - } - - memos, err := s.Store.ListMemos(ctx, memoFind) - if err != nil { - return nil, status.Errorf(codes.Internal, "failed to list memos: %v", err) - } - - location, err := time.LoadLocation(request.Timezone) - if err != nil { - return nil, status.Errorf(codes.Internal, "invalid timezone location") - } - - workspaceMemoRelatedSetting, err := s.Store.GetWorkspaceMemoRelatedSetting(ctx) - if err != nil { - return nil, status.Errorf(codes.Internal, "failed to get workspace memo related setting") - } - stats := make(map[string]int32) - for _, memo := range memos { - displayTs := memo.CreatedTs - if workspaceMemoRelatedSetting.DisplayWithUpdateTime { - displayTs = memo.UpdatedTs - } - stats[time.Unix(displayTs, 0).In(location).Format("2006-01-02")]++ - } - - response := &v1pb.GetUserMemosStatsResponse{ - Stats: stats, - } - return response, nil -} - func (s *APIV1Service) ExportMemos(ctx context.Context, request *v1pb.ExportMemosRequest) (*v1pb.ExportMemosResponse, error) { normalRowStatus := store.Normal memoFind := &store.FindMemo{ @@ -614,14 +559,28 @@ func (s *APIV1Service) ListMemoProperties(ctx context.Context, request *v1pb.Lis return nil, status.Errorf(codes.Internal, "failed to list memos") } - properties := []*v1pb.MemoProperty{} + workspaceMemoRelatedSetting, err := s.Store.GetWorkspaceMemoRelatedSetting(ctx) + if err != nil { + return nil, errors.Wrap(err, "failed to get workspace memo related setting") + } + + entities := []*v1pb.MemoPropertyEntity{} for _, memo := range memos { - if memo.Payload.Property != nil { - properties = append(properties, convertMemoPropertyFromStore(memo.Payload.Property)) + displayTs := memo.CreatedTs + if workspaceMemoRelatedSetting.DisplayWithUpdateTime { + displayTs = memo.UpdatedTs } + entity := &v1pb.MemoPropertyEntity{ + Name: fmt.Sprintf("%s%d", MemoNamePrefix, memo.ID), + DisplayTime: timestamppb.New(time.Unix(displayTs, 0)), + } + if memo.Payload.Property != nil { + entity.Property = convertMemoPropertyFromStore(memo.Payload.Property) + } + entities = append(entities, entity) } return &v1pb.ListMemoPropertiesResponse{ - Properties: properties, + Entities: entities, }, nil } diff --git a/web/src/components/ActivityCalendar.tsx b/web/src/components/ActivityCalendar.tsx index fcf3cd5c..515ffae3 100644 --- a/web/src/components/ActivityCalendar.tsx +++ b/web/src/components/ActivityCalendar.tsx @@ -1,6 +1,6 @@ import { Tooltip } from "@mui/joy"; import clsx from "clsx"; -import { getNormalizedDateString, getDateWithOffset } from "@/helpers/datetime"; +import dayjs from "dayjs"; import { useTranslate } from "@/utils/i18n"; interface Props { @@ -29,8 +29,8 @@ const getCellAdditionalStyles = (count: number, maxCount: number) => { const ActivityCalendar = (props: Props) => { const t = useTranslate(); const { month: monthStr, data, onClick } = props; - const year = new Date(monthStr).getFullYear(); - const month = new Date(monthStr).getMonth() + 1; + const year = dayjs(monthStr).toDate().getFullYear(); + const month = dayjs(monthStr).toDate().getMonth() + 1; const dayInMonth = new Date(year, month, 0).getDate(); const firstDay = new Date(year, month - 1, 1).getDay(); const lastDay = new Date(year, month - 1, dayInMonth).getDay(); @@ -49,14 +49,19 @@ const ActivityCalendar = (props: Props) => { return (
+
Su
+
Mo
+
Tu
+
We
+
Th
+
Fr
+
Sa
{days.map((day, index) => { - const date = getNormalizedDateString( - getDateWithOffset(`${year}-${String(month).padStart(2, "0")}-${String(day).padStart(2, "0")}`), - ); + const date = dayjs(`${year}-${month}-${day}`).format("YYYY-MM-DD"); const count = data[date] || 0; - const isToday = new Date().toDateString() === new Date(date).toDateString(); + const isToday = dayjs().format("YYYY-MM-DD") === date; const tooltipText = count ? t("memo.count-memos-in-date", { count: count, date: date }) : date; - const isSelected = new Date(props.selectedDate).toDateString() === new Date(date).toDateString(); + const isSelected = dayjs(props.selectedDate).format("YYYY-MM-DD") === date; return day ? ( count > 0 ? ( @@ -68,7 +73,7 @@ const ActivityCalendar = (props: Props) => { isSelected && "font-bold border-zinc-400 dark:border-zinc-300", !isToday && !isSelected && "border-transparent", )} - onClick={() => count && onClick && onClick(new Date(date).toDateString())} + onClick={() => count && onClick && onClick(date)} > {day}
diff --git a/web/src/components/UserStatisticsView.tsx b/web/src/components/UserStatisticsView.tsx index 0564282f..467a9fc6 100644 --- a/web/src/components/UserStatisticsView.tsx +++ b/web/src/components/UserStatisticsView.tsx @@ -1,6 +1,7 @@ import { Divider, Tooltip } from "@mui/joy"; import clsx from "clsx"; import dayjs from "dayjs"; +import { chain } from "lodash-es"; import { useState } from "react"; import toast from "react-hot-toast"; import { memoServiceClient } from "@/grpcweb"; @@ -33,43 +34,36 @@ const UserStatisticsView = () => { const days = Math.ceil((Date.now() - currentUser.createTime!.getTime()) / 86400000); useAsyncEffect(async () => { - const { properties } = await memoServiceClient.listMemoProperties({ + const { entities } = await memoServiceClient.listMemoProperties({ name: `memos/-`, }); const memoStats: UserMemoStats = { link: 0, taskList: 0, code: 0, incompleteTasks: 0 }; - properties.forEach((property) => { - if (property.hasLink) { + entities.forEach((entity) => { + const { property } = entity; + if (property?.hasLink) { memoStats.link += 1; } - if (property.hasTaskList) { + if (property?.hasTaskList) { memoStats.taskList += 1; } - if (property.hasCode) { + if (property?.hasCode) { memoStats.code += 1; } - if (property.hasIncompleteTasks) { + if (property?.hasIncompleteTasks) { memoStats.incompleteTasks += 1; } }); + const displayTimes = entities.map((entity) => entity.displayTime).filter(Boolean) as Date[]; + const monthStrGroup = chain(displayTimes) + .map((date) => dayjs(date).format("YYYY-MM-DD")) + .countBy() + .value(); setMemoStats(memoStats); - setMemoAmount(properties.length); - - const filters = [`row_status == "NORMAL"`]; - const { stats } = await memoServiceClient.getUserMemosStats({ - name: currentUser.name, - timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, - filter: filters.join(" && "), - }); - setActivityStats( - Object.fromEntries( - Object.entries(stats).filter(([date]) => { - return dayjs(date).format("YYYY-MM") === monthString; - }), - ), - ); + setMemoAmount(entities.length); + setActivityStats(monthStrGroup); }, [memoStore.stateId]); - const handleRebuildMemoTags = async () => { + const rebuildMemoTags = async () => { await memoServiceClient.rebuildMemoProperty({ name: "memos/-", }); @@ -77,12 +71,17 @@ const UserStatisticsView = () => { window.location.reload(); }; + const onCalendarClick = (date: string) => { + memoFilterStore.removeFilter((f) => f.factor === "displayTime"); + memoFilterStore.addFilter({ factor: "displayTime", value: date }); + }; + return (
-
+
- {new Date(monthString).toLocaleString(i18n.language, { year: "numeric", month: "long" })} + {dayjs(monthString).toDate().toLocaleString(i18n.language, { year: "numeric", month: "long" })} { - @@ -106,10 +105,10 @@ const UserStatisticsView = () => {
- + {memoAmount > 0 && (

- {memoAmount} memos in {days} days + {memoAmount} memos in {days} {days > 1 ? "days" : "day"}

)}
diff --git a/web/src/helpers/datetime.ts b/web/src/helpers/datetime.ts index 453e5fc1..d1e4a6c5 100644 --- a/web/src/helpers/datetime.ts +++ b/web/src/helpers/datetime.ts @@ -4,26 +4,6 @@ export function getTimeStampByDate(t: Date | number | string | any): number { return new Date(t).getTime(); } -/** - * Get a time string to provided time. - * - * If no date is provided, the current date is used. - * - * Output is always ``HH:MM`` (24-hour format) - */ -export function getTimeString(t?: Date | number | string): string { - const tsFromDate = getTimeStampByDate(t ? t : Date.now()); - const d = new Date(tsFromDate); - - const hours = d.getHours(); - const mins = d.getMinutes(); - - const hoursStr = hours < 10 ? "0" + hours : hours; - const minsStr = mins < 10 ? "0" + mins : mins; - - return `${hoursStr}:${minsStr}`; -} - /** * Get a localized date and time string to provided time. * @@ -49,51 +29,3 @@ export function getDateTimeString(t?: Date | number | string | any, locale = i18 return tsFromDate.toLocaleString(); } } - -/** - * This returns the normalized date string of the provided date. - * Format is always `YYYY-MM-DDT00:00`. - * - * If no date is provided, the current date is used. - */ -export function getNormalizedTimeString(t?: Date | number | string): string { - const date = new Date(t ? t : Date.now()); - - const yyyy = date.getFullYear(); - const M = date.getMonth() + 1; - const d = date.getDate(); - const h = date.getHours(); - const m = date.getMinutes(); - - const MM = M < 10 ? "0" + M : M; - const dd = d < 10 ? "0" + d : d; - const hh = h < 10 ? "0" + h : h; - const mm = m < 10 ? "0" + m : m; - - return `${yyyy}-${MM}-${dd}T${hh}:${mm}`; -} - -export function getNormalizedDateString(t?: Date | number | string): string { - const date = new Date(t ? t : Date.now()); - - const yyyy = date.getFullYear(); - const M = date.getMonth() + 1; - const d = date.getDate(); - - const MM = M < 10 ? "0" + M : M; - const dd = d < 10 ? "0" + d : d; - - return `${yyyy}-${MM}-${dd}`; -} - -/** - * Calculates a new Date object by adjusting the provided date, timestamp, or date string - * based on the current timezone offset. - * - * @param t - The input date, timestamp, or date string (optional). If not provided, - * the current date and time will be used. - * @returns A new Date object adjusted by the current timezone offset. - */ -export function getDateWithOffset(t?: Date | number | string): Date { - return new Date(getTimeStampByDate(t) + new Date().getTimezoneOffset() * 60 * 1000); -} diff --git a/web/src/layouts/RootLayout.tsx b/web/src/layouts/RootLayout.tsx index 18dcad04..f369c14e 100644 --- a/web/src/layouts/RootLayout.tsx +++ b/web/src/layouts/RootLayout.tsx @@ -9,11 +9,13 @@ import useCurrentUser from "@/hooks/useCurrentUser"; import useResponsiveWidth from "@/hooks/useResponsiveWidth"; import Loading from "@/pages/Loading"; import { Routes } from "@/router"; +import { useMemoFilterStore } from "@/store/v1"; const RootLayout = () => { const location = useLocation(); const { sm } = useResponsiveWidth(); const currentUser = useCurrentUser(); + const memoFilterStore = useMemoFilterStore(); const [collapsed, setCollapsed] = useLocalStorage("navigation-collapsed", false); const [initialized, setInitialized] = useState(false); @@ -27,6 +29,11 @@ const RootLayout = () => { setInitialized(true); }, []); + useEffect(() => { + // When the route changes, remove all filters. + memoFilterStore.removeFilter(() => true); + }, [location.pathname]); + return !initialized ? ( ) : ( diff --git a/web/src/pages/Home.tsx b/web/src/pages/Home.tsx index 28496e2b..9cf5c37e 100644 --- a/web/src/pages/Home.tsx +++ b/web/src/pages/Home.tsx @@ -51,6 +51,10 @@ const Home = () => { filters.push(`has_task_list == true`); } else if (filter.factor === "property.hasCode") { filters.push(`has_code == true`); + } else if (filter.factor === "displayTime") { + const timestampAfter = getTimeStampByDate(new Date(filter.value)) / 1000; + filters.push(`display_time_after == ${timestampAfter}`); + filters.push(`display_time_before == ${timestampAfter + 60 * 60 * 24}`); } } if (contentSearch.length > 0) {