refactor(api): remove DeleteMemoTag and RenameMemoTag endpoints

BREAKING CHANGE: Removed DeleteMemoTag and RenameMemoTag API endpoints
for better API consistency. Tags should now be managed by updating memo
content directly via UpdateMemo endpoint.

Backend changes:
- Remove RenameMemoTag and DeleteMemoTag RPC methods from proto
- Remove backend implementations in memo_service.go
- Regenerate protocol buffers (Go, TypeScript, OpenAPI)

Frontend changes:
- Remove RenameTagDialog component
- Simplify TagsSection to remove rename/delete functionality
- Improve tag styling with active state highlighting
- Add smooth transitions and better hover interactions
- Polish TagTree component for consistency
- Tags now only support click-to-filter (no inline editing)

Style improvements:
- Active tags highlighted with primary color and font-medium
- Consistent hover states across flat and tree views
- Better spacing and visual hierarchy
- Improved empty state styling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
pull/5078/merge
Steven 4 days ago
parent d794c0bf8b
commit 243ecf14b0

@ -46,22 +46,6 @@ service MemoService {
option (google.api.http) = {delete: "/api/v1/{name=memos/*}"};
option (google.api.method_signature) = "name";
}
// RenameMemoTag renames a tag for a memo.
rpc RenameMemoTag(RenameMemoTagRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
patch: "/api/v1/{parent=memos/*}/tags:rename"
body: "*"
};
option (google.api.method_signature) = "parent,old_tag,new_tag";
}
// DeleteMemoTag deletes a tag for a memo.
rpc DeleteMemoTag(DeleteMemoTagRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
post: "/api/v1/{parent=memos/*}/tags:delete"
body: "*"
};
option (google.api.method_signature) = "parent,tag";
}
// SetMemoAttachments sets attachments for a memo.
rpc SetMemoAttachments(SetMemoAttachmentsRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
@ -262,12 +246,6 @@ message CreateMemoRequest {
// Optional. The memo ID to use for this memo.
// If empty, a unique ID will be generated.
string memo_id = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. If set, validate the request but don't actually create the memo.
bool validate_only = 3 [(google.api.field_behavior) = OPTIONAL];
// Optional. An idempotency token.
string request_id = 4 [(google.api.field_behavior) = OPTIONAL];
}
message ListMemosRequest {
@ -308,9 +286,6 @@ message ListMemosResponse {
// A token that can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there are no subsequent pages.
string next_page_token = 2;
// The total count of memos (may be approximate).
int32 total_size = 3;
}
message GetMemoRequest {
@ -320,10 +295,6 @@ message GetMemoRequest {
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {type: "memos.api.v1/Memo"}
];
// Optional. The fields to return in the response.
// If not specified, all fields are returned.
google.protobuf.FieldMask read_mask = 2 [(google.api.field_behavior) = OPTIONAL];
}
message UpdateMemoRequest {
@ -333,9 +304,6 @@ message UpdateMemoRequest {
// Required. The list of fields to update.
google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. If set to true, allows updating sensitive fields.
bool allow_missing = 3 [(google.api.field_behavior) = OPTIONAL];
}
message DeleteMemoRequest {
@ -350,36 +318,6 @@ message DeleteMemoRequest {
bool force = 2 [(google.api.field_behavior) = OPTIONAL];
}
message RenameMemoTagRequest {
// Required. The parent, who owns the tags.
// Format: memos/{memo}. Use "memos/-" to rename all tags.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {type: "memos.api.v1/Memo"}
];
// Required. The old tag name to rename.
string old_tag = 2 [(google.api.field_behavior) = REQUIRED];
// Required. The new tag name.
string new_tag = 3 [(google.api.field_behavior) = REQUIRED];
}
message DeleteMemoTagRequest {
// Required. The parent, who owns the tags.
// Format: memos/{memo}. Use "memos/-" to delete all tags.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {type: "memos.api.v1/Memo"}
];
// Required. The tag name to delete.
string tag = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. Whether to delete related memos.
bool delete_related_memos = 3 [(google.api.field_behavior) = OPTIONAL];
}
message SetMemoAttachmentsRequest {
// Required. The resource name of the memo.
// Format: memos/{memo}
@ -413,9 +351,6 @@ message ListMemoAttachmentsResponse {
// A token for the next page of results.
string next_page_token = 2;
// The total count of attachments.
int32 total_size = 3;
}
message MemoRelation {
@ -480,9 +415,6 @@ message ListMemoRelationsResponse {
// A token for the next page of results.
string next_page_token = 2;
// The total count of relations.
int32 total_size = 3;
}
message CreateMemoCommentRequest {

@ -124,7 +124,7 @@ func (x MemoRelation_Type) Number() protoreflect.EnumNumber {
// Deprecated: Use MemoRelation_Type.Descriptor instead.
func (MemoRelation_Type) EnumDescriptor() ([]byte, []int) {
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{14, 0}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{12, 0}
}
type Reaction struct {
@ -473,11 +473,7 @@ type CreateMemoRequest struct {
Memo *Memo `protobuf:"bytes,1,opt,name=memo,proto3" json:"memo,omitempty"`
// Optional. The memo ID to use for this memo.
// If empty, a unique ID will be generated.
MemoId string `protobuf:"bytes,2,opt,name=memo_id,json=memoId,proto3" json:"memo_id,omitempty"`
// Optional. If set, validate the request but don't actually create the memo.
ValidateOnly bool `protobuf:"varint,3,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"`
// Optional. An idempotency token.
RequestId string `protobuf:"bytes,4,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
MemoId string `protobuf:"bytes,2,opt,name=memo_id,json=memoId,proto3" json:"memo_id,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -526,20 +522,6 @@ func (x *CreateMemoRequest) GetMemoId() string {
return ""
}
func (x *CreateMemoRequest) GetValidateOnly() bool {
if x != nil {
return x.ValidateOnly
}
return false
}
func (x *CreateMemoRequest) GetRequestId() string {
if x != nil {
return x.RequestId
}
return ""
}
type ListMemosRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Optional. The maximum number of memos to return.
@ -648,8 +630,6 @@ type ListMemosResponse struct {
// A token that can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there are no subsequent pages.
NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
// The total count of memos (may be approximate).
TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -698,21 +678,11 @@ func (x *ListMemosResponse) GetNextPageToken() string {
return ""
}
func (x *ListMemosResponse) GetTotalSize() int32 {
if x != nil {
return x.TotalSize
}
return 0
}
type GetMemoRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Required. The resource name of the memo.
// Format: memos/{memo}
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Optional. The fields to return in the response.
// If not specified, all fields are returned.
ReadMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=read_mask,json=readMask,proto3" json:"read_mask,omitempty"`
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -754,22 +724,13 @@ func (x *GetMemoRequest) GetName() string {
return ""
}
func (x *GetMemoRequest) GetReadMask() *fieldmaskpb.FieldMask {
if x != nil {
return x.ReadMask
}
return nil
}
type UpdateMemoRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Required. The memo to update.
// The `name` field is required.
Memo *Memo `protobuf:"bytes,1,opt,name=memo,proto3" json:"memo,omitempty"`
// Required. The list of fields to update.
UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
// Optional. If set to true, allows updating sensitive fields.
AllowMissing bool `protobuf:"varint,3,opt,name=allow_missing,json=allowMissing,proto3" json:"allow_missing,omitempty"`
UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -818,13 +779,6 @@ func (x *UpdateMemoRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
return nil
}
func (x *UpdateMemoRequest) GetAllowMissing() bool {
if x != nil {
return x.AllowMissing
}
return false
}
type DeleteMemoRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Required. The resource name of the memo to delete.
@ -880,134 +834,6 @@ func (x *DeleteMemoRequest) GetForce() bool {
return false
}
type RenameMemoTagRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Required. The parent, who owns the tags.
// Format: memos/{memo}. Use "memos/-" to rename all tags.
Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
// Required. The old tag name to rename.
OldTag string `protobuf:"bytes,2,opt,name=old_tag,json=oldTag,proto3" json:"old_tag,omitempty"`
// Required. The new tag name.
NewTag string `protobuf:"bytes,3,opt,name=new_tag,json=newTag,proto3" json:"new_tag,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *RenameMemoTagRequest) Reset() {
*x = RenameMemoTagRequest{}
mi := &file_api_v1_memo_service_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *RenameMemoTagRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RenameMemoTagRequest) ProtoMessage() {}
func (x *RenameMemoTagRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[9]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RenameMemoTagRequest.ProtoReflect.Descriptor instead.
func (*RenameMemoTagRequest) Descriptor() ([]byte, []int) {
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{9}
}
func (x *RenameMemoTagRequest) GetParent() string {
if x != nil {
return x.Parent
}
return ""
}
func (x *RenameMemoTagRequest) GetOldTag() string {
if x != nil {
return x.OldTag
}
return ""
}
func (x *RenameMemoTagRequest) GetNewTag() string {
if x != nil {
return x.NewTag
}
return ""
}
type DeleteMemoTagRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Required. The parent, who owns the tags.
// Format: memos/{memo}. Use "memos/-" to delete all tags.
Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
// Required. The tag name to delete.
Tag string `protobuf:"bytes,2,opt,name=tag,proto3" json:"tag,omitempty"`
// Optional. Whether to delete related memos.
DeleteRelatedMemos bool `protobuf:"varint,3,opt,name=delete_related_memos,json=deleteRelatedMemos,proto3" json:"delete_related_memos,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *DeleteMemoTagRequest) Reset() {
*x = DeleteMemoTagRequest{}
mi := &file_api_v1_memo_service_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *DeleteMemoTagRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DeleteMemoTagRequest) ProtoMessage() {}
func (x *DeleteMemoTagRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[10]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DeleteMemoTagRequest.ProtoReflect.Descriptor instead.
func (*DeleteMemoTagRequest) Descriptor() ([]byte, []int) {
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{10}
}
func (x *DeleteMemoTagRequest) GetParent() string {
if x != nil {
return x.Parent
}
return ""
}
func (x *DeleteMemoTagRequest) GetTag() string {
if x != nil {
return x.Tag
}
return ""
}
func (x *DeleteMemoTagRequest) GetDeleteRelatedMemos() bool {
if x != nil {
return x.DeleteRelatedMemos
}
return false
}
type SetMemoAttachmentsRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Required. The resource name of the memo.
@ -1021,7 +847,7 @@ type SetMemoAttachmentsRequest struct {
func (x *SetMemoAttachmentsRequest) Reset() {
*x = SetMemoAttachmentsRequest{}
mi := &file_api_v1_memo_service_proto_msgTypes[11]
mi := &file_api_v1_memo_service_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1033,7 +859,7 @@ func (x *SetMemoAttachmentsRequest) String() string {
func (*SetMemoAttachmentsRequest) ProtoMessage() {}
func (x *SetMemoAttachmentsRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[11]
mi := &file_api_v1_memo_service_proto_msgTypes[9]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1046,7 +872,7 @@ func (x *SetMemoAttachmentsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SetMemoAttachmentsRequest.ProtoReflect.Descriptor instead.
func (*SetMemoAttachmentsRequest) Descriptor() ([]byte, []int) {
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{11}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{9}
}
func (x *SetMemoAttachmentsRequest) GetName() string {
@ -1078,7 +904,7 @@ type ListMemoAttachmentsRequest struct {
func (x *ListMemoAttachmentsRequest) Reset() {
*x = ListMemoAttachmentsRequest{}
mi := &file_api_v1_memo_service_proto_msgTypes[12]
mi := &file_api_v1_memo_service_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1090,7 +916,7 @@ func (x *ListMemoAttachmentsRequest) String() string {
func (*ListMemoAttachmentsRequest) ProtoMessage() {}
func (x *ListMemoAttachmentsRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[12]
mi := &file_api_v1_memo_service_proto_msgTypes[10]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1103,7 +929,7 @@ func (x *ListMemoAttachmentsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListMemoAttachmentsRequest.ProtoReflect.Descriptor instead.
func (*ListMemoAttachmentsRequest) Descriptor() ([]byte, []int) {
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{12}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{10}
}
func (x *ListMemoAttachmentsRequest) GetName() string {
@ -1133,15 +959,13 @@ type ListMemoAttachmentsResponse struct {
Attachments []*Attachment `protobuf:"bytes,1,rep,name=attachments,proto3" json:"attachments,omitempty"`
// A token for the next page of results.
NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
// The total count of attachments.
TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ListMemoAttachmentsResponse) Reset() {
*x = ListMemoAttachmentsResponse{}
mi := &file_api_v1_memo_service_proto_msgTypes[13]
mi := &file_api_v1_memo_service_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1153,7 +977,7 @@ func (x *ListMemoAttachmentsResponse) String() string {
func (*ListMemoAttachmentsResponse) ProtoMessage() {}
func (x *ListMemoAttachmentsResponse) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[13]
mi := &file_api_v1_memo_service_proto_msgTypes[11]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1166,7 +990,7 @@ func (x *ListMemoAttachmentsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListMemoAttachmentsResponse.ProtoReflect.Descriptor instead.
func (*ListMemoAttachmentsResponse) Descriptor() ([]byte, []int) {
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{13}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{11}
}
func (x *ListMemoAttachmentsResponse) GetAttachments() []*Attachment {
@ -1183,13 +1007,6 @@ func (x *ListMemoAttachmentsResponse) GetNextPageToken() string {
return ""
}
func (x *ListMemoAttachmentsResponse) GetTotalSize() int32 {
if x != nil {
return x.TotalSize
}
return 0
}
type MemoRelation struct {
state protoimpl.MessageState `protogen:"open.v1"`
// The memo in the relation.
@ -1203,7 +1020,7 @@ type MemoRelation struct {
func (x *MemoRelation) Reset() {
*x = MemoRelation{}
mi := &file_api_v1_memo_service_proto_msgTypes[14]
mi := &file_api_v1_memo_service_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1215,7 +1032,7 @@ func (x *MemoRelation) String() string {
func (*MemoRelation) ProtoMessage() {}
func (x *MemoRelation) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[14]
mi := &file_api_v1_memo_service_proto_msgTypes[12]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1228,7 +1045,7 @@ func (x *MemoRelation) ProtoReflect() protoreflect.Message {
// Deprecated: Use MemoRelation.ProtoReflect.Descriptor instead.
func (*MemoRelation) Descriptor() ([]byte, []int) {
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{14}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{12}
}
func (x *MemoRelation) GetMemo() *MemoRelation_Memo {
@ -1265,7 +1082,7 @@ type SetMemoRelationsRequest struct {
func (x *SetMemoRelationsRequest) Reset() {
*x = SetMemoRelationsRequest{}
mi := &file_api_v1_memo_service_proto_msgTypes[15]
mi := &file_api_v1_memo_service_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1277,7 +1094,7 @@ func (x *SetMemoRelationsRequest) String() string {
func (*SetMemoRelationsRequest) ProtoMessage() {}
func (x *SetMemoRelationsRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[15]
mi := &file_api_v1_memo_service_proto_msgTypes[13]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1290,7 +1107,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{15}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{13}
}
func (x *SetMemoRelationsRequest) GetName() string {
@ -1322,7 +1139,7 @@ type ListMemoRelationsRequest struct {
func (x *ListMemoRelationsRequest) Reset() {
*x = ListMemoRelationsRequest{}
mi := &file_api_v1_memo_service_proto_msgTypes[16]
mi := &file_api_v1_memo_service_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1334,7 +1151,7 @@ func (x *ListMemoRelationsRequest) String() string {
func (*ListMemoRelationsRequest) ProtoMessage() {}
func (x *ListMemoRelationsRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[16]
mi := &file_api_v1_memo_service_proto_msgTypes[14]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1347,7 +1164,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{16}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{14}
}
func (x *ListMemoRelationsRequest) GetName() string {
@ -1377,15 +1194,13 @@ type ListMemoRelationsResponse struct {
Relations []*MemoRelation `protobuf:"bytes,1,rep,name=relations,proto3" json:"relations,omitempty"`
// A token for the next page of results.
NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
// The total count of relations.
TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ListMemoRelationsResponse) Reset() {
*x = ListMemoRelationsResponse{}
mi := &file_api_v1_memo_service_proto_msgTypes[17]
mi := &file_api_v1_memo_service_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1397,7 +1212,7 @@ func (x *ListMemoRelationsResponse) String() string {
func (*ListMemoRelationsResponse) ProtoMessage() {}
func (x *ListMemoRelationsResponse) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[17]
mi := &file_api_v1_memo_service_proto_msgTypes[15]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1410,7 +1225,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{17}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{15}
}
func (x *ListMemoRelationsResponse) GetRelations() []*MemoRelation {
@ -1427,13 +1242,6 @@ func (x *ListMemoRelationsResponse) GetNextPageToken() string {
return ""
}
func (x *ListMemoRelationsResponse) GetTotalSize() int32 {
if x != nil {
return x.TotalSize
}
return 0
}
type CreateMemoCommentRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Required. The resource name of the memo.
@ -1449,7 +1257,7 @@ type CreateMemoCommentRequest struct {
func (x *CreateMemoCommentRequest) Reset() {
*x = CreateMemoCommentRequest{}
mi := &file_api_v1_memo_service_proto_msgTypes[18]
mi := &file_api_v1_memo_service_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1461,7 +1269,7 @@ func (x *CreateMemoCommentRequest) String() string {
func (*CreateMemoCommentRequest) ProtoMessage() {}
func (x *CreateMemoCommentRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[18]
mi := &file_api_v1_memo_service_proto_msgTypes[16]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1474,7 +1282,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{18}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{16}
}
func (x *CreateMemoCommentRequest) GetName() string {
@ -1515,7 +1323,7 @@ type ListMemoCommentsRequest struct {
func (x *ListMemoCommentsRequest) Reset() {
*x = ListMemoCommentsRequest{}
mi := &file_api_v1_memo_service_proto_msgTypes[19]
mi := &file_api_v1_memo_service_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1527,7 +1335,7 @@ func (x *ListMemoCommentsRequest) String() string {
func (*ListMemoCommentsRequest) ProtoMessage() {}
func (x *ListMemoCommentsRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[19]
mi := &file_api_v1_memo_service_proto_msgTypes[17]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1540,7 +1348,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{19}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{17}
}
func (x *ListMemoCommentsRequest) GetName() string {
@ -1585,7 +1393,7 @@ type ListMemoCommentsResponse struct {
func (x *ListMemoCommentsResponse) Reset() {
*x = ListMemoCommentsResponse{}
mi := &file_api_v1_memo_service_proto_msgTypes[20]
mi := &file_api_v1_memo_service_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1597,7 +1405,7 @@ func (x *ListMemoCommentsResponse) String() string {
func (*ListMemoCommentsResponse) ProtoMessage() {}
func (x *ListMemoCommentsResponse) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[20]
mi := &file_api_v1_memo_service_proto_msgTypes[18]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1610,7 +1418,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{20}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{18}
}
func (x *ListMemoCommentsResponse) GetMemos() []*Memo {
@ -1649,7 +1457,7 @@ type ListMemoReactionsRequest struct {
func (x *ListMemoReactionsRequest) Reset() {
*x = ListMemoReactionsRequest{}
mi := &file_api_v1_memo_service_proto_msgTypes[21]
mi := &file_api_v1_memo_service_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1661,7 +1469,7 @@ func (x *ListMemoReactionsRequest) String() string {
func (*ListMemoReactionsRequest) ProtoMessage() {}
func (x *ListMemoReactionsRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[21]
mi := &file_api_v1_memo_service_proto_msgTypes[19]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1674,7 +1482,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{21}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{19}
}
func (x *ListMemoReactionsRequest) GetName() string {
@ -1712,7 +1520,7 @@ type ListMemoReactionsResponse struct {
func (x *ListMemoReactionsResponse) Reset() {
*x = ListMemoReactionsResponse{}
mi := &file_api_v1_memo_service_proto_msgTypes[22]
mi := &file_api_v1_memo_service_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1724,7 +1532,7 @@ func (x *ListMemoReactionsResponse) String() string {
func (*ListMemoReactionsResponse) ProtoMessage() {}
func (x *ListMemoReactionsResponse) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[22]
mi := &file_api_v1_memo_service_proto_msgTypes[20]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1737,7 +1545,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{22}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{20}
}
func (x *ListMemoReactionsResponse) GetReactions() []*Reaction {
@ -1774,7 +1582,7 @@ type UpsertMemoReactionRequest struct {
func (x *UpsertMemoReactionRequest) Reset() {
*x = UpsertMemoReactionRequest{}
mi := &file_api_v1_memo_service_proto_msgTypes[23]
mi := &file_api_v1_memo_service_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1786,7 +1594,7 @@ func (x *UpsertMemoReactionRequest) String() string {
func (*UpsertMemoReactionRequest) ProtoMessage() {}
func (x *UpsertMemoReactionRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[23]
mi := &file_api_v1_memo_service_proto_msgTypes[21]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1799,7 +1607,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{23}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{21}
}
func (x *UpsertMemoReactionRequest) GetName() string {
@ -1827,7 +1635,7 @@ type DeleteMemoReactionRequest struct {
func (x *DeleteMemoReactionRequest) Reset() {
*x = DeleteMemoReactionRequest{}
mi := &file_api_v1_memo_service_proto_msgTypes[24]
mi := &file_api_v1_memo_service_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1839,7 +1647,7 @@ func (x *DeleteMemoReactionRequest) String() string {
func (*DeleteMemoReactionRequest) ProtoMessage() {}
func (x *DeleteMemoReactionRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[24]
mi := &file_api_v1_memo_service_proto_msgTypes[22]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1852,7 +1660,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{24}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{22}
}
func (x *DeleteMemoReactionRequest) GetName() string {
@ -1875,7 +1683,7 @@ type Memo_Property struct {
func (x *Memo_Property) Reset() {
*x = Memo_Property{}
mi := &file_api_v1_memo_service_proto_msgTypes[25]
mi := &file_api_v1_memo_service_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1887,7 +1695,7 @@ func (x *Memo_Property) String() string {
func (*Memo_Property) ProtoMessage() {}
func (x *Memo_Property) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[25]
mi := &file_api_v1_memo_service_proto_msgTypes[23]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1945,7 +1753,7 @@ type MemoRelation_Memo struct {
func (x *MemoRelation_Memo) Reset() {
*x = MemoRelation_Memo{}
mi := &file_api_v1_memo_service_proto_msgTypes[26]
mi := &file_api_v1_memo_service_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1957,7 +1765,7 @@ func (x *MemoRelation_Memo) String() string {
func (*MemoRelation_Memo) ProtoMessage() {}
func (x *MemoRelation_Memo) ProtoReflect() protoreflect.Message {
mi := &file_api_v1_memo_service_proto_msgTypes[26]
mi := &file_api_v1_memo_service_proto_msgTypes[24]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1970,7 +1778,7 @@ func (x *MemoRelation_Memo) ProtoReflect() protoreflect.Message {
// Deprecated: Use MemoRelation_Memo.ProtoReflect.Descriptor instead.
func (*MemoRelation_Memo) Descriptor() ([]byte, []int) {
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{14, 0}
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{12, 0}
}
func (x *MemoRelation_Memo) GetName() string {
@ -2039,13 +1847,10 @@ const file_api_v1_memo_service_proto_rawDesc = "" +
"\bLocation\x12%\n" +
"\vplaceholder\x18\x01 \x01(\tB\x03\xe0A\x01R\vplaceholder\x12\x1f\n" +
"\blatitude\x18\x02 \x01(\x01B\x03\xe0A\x01R\blatitude\x12!\n" +
"\tlongitude\x18\x03 \x01(\x01B\x03\xe0A\x01R\tlongitude\"\xac\x01\n" +
"\tlongitude\x18\x03 \x01(\x01B\x03\xe0A\x01R\tlongitude\"^\n" +
"\x11CreateMemoRequest\x12+\n" +
"\x04memo\x18\x01 \x01(\v2\x12.memos.api.v1.MemoB\x03\xe0A\x02R\x04memo\x12\x1c\n" +
"\amemo_id\x18\x02 \x01(\tB\x03\xe0A\x01R\x06memoId\x12(\n" +
"\rvalidate_only\x18\x03 \x01(\bB\x03\xe0A\x01R\fvalidateOnly\x12\"\n" +
"\n" +
"request_id\x18\x04 \x01(\tB\x03\xe0A\x01R\trequestId\"\xed\x01\n" +
"\amemo_id\x18\x02 \x01(\tB\x03\xe0A\x01R\x06memoId\"\xed\x01\n" +
"\x10ListMemosRequest\x12 \n" +
"\tpage_size\x18\x01 \x01(\x05B\x03\xe0A\x01R\bpageSize\x12\"\n" +
"\n" +
@ -2053,35 +1858,21 @@ const file_api_v1_memo_service_proto_rawDesc = "" +
"\x05state\x18\x03 \x01(\x0e2\x13.memos.api.v1.StateB\x03\xe0A\x01R\x05state\x12\x1e\n" +
"\border_by\x18\x04 \x01(\tB\x03\xe0A\x01R\aorderBy\x12\x1b\n" +
"\x06filter\x18\x05 \x01(\tB\x03\xe0A\x01R\x06filter\x12&\n" +
"\fshow_deleted\x18\x06 \x01(\bB\x03\xe0A\x01R\vshowDeleted\"\x84\x01\n" +
"\fshow_deleted\x18\x06 \x01(\bB\x03\xe0A\x01R\vshowDeleted\"e\n" +
"\x11ListMemosResponse\x12(\n" +
"\x05memos\x18\x01 \x03(\v2\x12.memos.api.v1.MemoR\x05memos\x12&\n" +
"\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1d\n" +
"\n" +
"total_size\x18\x03 \x01(\x05R\ttotalSize\"}\n" +
"\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"?\n" +
"\x0eGetMemoRequest\x12-\n" +
"\x04name\x18\x01 \x01(\tB\x19\xe0A\x02\xfaA\x13\n" +
"\x11memos.api.v1/MemoR\x04name\x12<\n" +
"\tread_mask\x18\x02 \x01(\v2\x1a.google.protobuf.FieldMaskB\x03\xe0A\x01R\breadMask\"\xac\x01\n" +
"\x11memos.api.v1/MemoR\x04name\"\x82\x01\n" +
"\x11UpdateMemoRequest\x12+\n" +
"\x04memo\x18\x01 \x01(\v2\x12.memos.api.v1.MemoB\x03\xe0A\x02R\x04memo\x12@\n" +
"\vupdate_mask\x18\x02 \x01(\v2\x1a.google.protobuf.FieldMaskB\x03\xe0A\x02R\n" +
"updateMask\x12(\n" +
"\rallow_missing\x18\x03 \x01(\bB\x03\xe0A\x01R\fallowMissing\"]\n" +
"updateMask\"]\n" +
"\x11DeleteMemoRequest\x12-\n" +
"\x04name\x18\x01 \x01(\tB\x19\xe0A\x02\xfaA\x13\n" +
"\x11memos.api.v1/MemoR\x04name\x12\x19\n" +
"\x05force\x18\x02 \x01(\bB\x03\xe0A\x01R\x05force\"\x85\x01\n" +
"\x14RenameMemoTagRequest\x121\n" +
"\x06parent\x18\x01 \x01(\tB\x19\xe0A\x02\xfaA\x13\n" +
"\x11memos.api.v1/MemoR\x06parent\x12\x1c\n" +
"\aold_tag\x18\x02 \x01(\tB\x03\xe0A\x02R\x06oldTag\x12\x1c\n" +
"\anew_tag\x18\x03 \x01(\tB\x03\xe0A\x02R\x06newTag\"\x97\x01\n" +
"\x14DeleteMemoTagRequest\x121\n" +
"\x06parent\x18\x01 \x01(\tB\x19\xe0A\x02\xfaA\x13\n" +
"\x11memos.api.v1/MemoR\x06parent\x12\x15\n" +
"\x03tag\x18\x02 \x01(\tB\x03\xe0A\x02R\x03tag\x125\n" +
"\x14delete_related_memos\x18\x03 \x01(\bB\x03\xe0A\x01R\x12deleteRelatedMemos\"\x8b\x01\n" +
"\x05force\x18\x02 \x01(\bB\x03\xe0A\x01R\x05force\"\x8b\x01\n" +
"\x19SetMemoAttachmentsRequest\x12-\n" +
"\x04name\x18\x01 \x01(\tB\x19\xe0A\x02\xfaA\x13\n" +
"\x11memos.api.v1/MemoR\x04name\x12?\n" +
@ -2091,12 +1882,10 @@ const file_api_v1_memo_service_proto_rawDesc = "" +
"\x11memos.api.v1/MemoR\x04name\x12 \n" +
"\tpage_size\x18\x02 \x01(\x05B\x03\xe0A\x01R\bpageSize\x12\"\n" +
"\n" +
"page_token\x18\x03 \x01(\tB\x03\xe0A\x01R\tpageToken\"\xa0\x01\n" +
"page_token\x18\x03 \x01(\tB\x03\xe0A\x01R\tpageToken\"\x81\x01\n" +
"\x1bListMemoAttachmentsResponse\x12:\n" +
"\vattachments\x18\x01 \x03(\v2\x18.memos.api.v1.AttachmentR\vattachments\x12&\n" +
"\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1d\n" +
"\n" +
"total_size\x18\x03 \x01(\x05R\ttotalSize\"\xdb\x02\n" +
"\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"\xdb\x02\n" +
"\fMemoRelation\x128\n" +
"\x04memo\x18\x01 \x01(\v2\x1f.memos.api.v1.MemoRelation.MemoB\x03\xe0A\x02R\x04memo\x12G\n" +
"\frelated_memo\x18\x02 \x01(\v2\x1f.memos.api.v1.MemoRelation.MemoB\x03\xe0A\x02R\vrelatedMemo\x128\n" +
@ -2118,12 +1907,10 @@ const file_api_v1_memo_service_proto_rawDesc = "" +
"\x11memos.api.v1/MemoR\x04name\x12 \n" +
"\tpage_size\x18\x02 \x01(\x05B\x03\xe0A\x01R\bpageSize\x12\"\n" +
"\n" +
"page_token\x18\x03 \x01(\tB\x03\xe0A\x01R\tpageToken\"\x9c\x01\n" +
"page_token\x18\x03 \x01(\tB\x03\xe0A\x01R\tpageToken\"}\n" +
"\x19ListMemoRelationsResponse\x128\n" +
"\trelations\x18\x01 \x03(\v2\x1a.memos.api.v1.MemoRelationR\trelations\x12&\n" +
"\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1d\n" +
"\n" +
"total_size\x18\x03 \x01(\x05R\ttotalSize\"\xa0\x01\n" +
"\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"\xa0\x01\n" +
"\x18CreateMemoCommentRequest\x12-\n" +
"\x04name\x18\x01 \x01(\tB\x19\xe0A\x02\xfaA\x13\n" +
"\x11memos.api.v1/MemoR\x04name\x121\n" +
@ -2166,7 +1953,7 @@ const file_api_v1_memo_service_proto_rawDesc = "" +
"\aPRIVATE\x10\x01\x12\r\n" +
"\tPROTECTED\x10\x02\x12\n" +
"\n" +
"\x06PUBLIC\x10\x032\xef\x10\n" +
"\x06PUBLIC\x10\x032\xcb\x0e\n" +
"\vMemoService\x12e\n" +
"\n" +
"CreateMemo\x12\x1f.memos.api.v1.CreateMemoRequest\x1a\x12.memos.api.v1.Memo\"\"\xdaA\x04memo\x82\xd3\xe4\x93\x02\x15:\x04memo\"\r/api/v1/memos\x12f\n" +
@ -2175,10 +1962,7 @@ const file_api_v1_memo_service_proto_rawDesc = "" +
"\n" +
"UpdateMemo\x12\x1f.memos.api.v1.UpdateMemoRequest\x1a\x12.memos.api.v1.Memo\"<\xdaA\x10memo,update_mask\x82\xd3\xe4\x93\x02#:\x04memo2\x1b/api/v1/{memo.name=memos/*}\x12l\n" +
"\n" +
"DeleteMemo\x12\x1f.memos.api.v1.DeleteMemoRequest\x1a\x16.google.protobuf.Empty\"%\xdaA\x04name\x82\xd3\xe4\x93\x02\x18*\x16/api/v1/{name=memos/*}\x12\x95\x01\n" +
"\rRenameMemoTag\x12\".memos.api.v1.RenameMemoTagRequest\x1a\x16.google.protobuf.Empty\"H\xdaA\x16parent,old_tag,new_tag\x82\xd3\xe4\x93\x02):\x01*2$/api/v1/{parent=memos/*}/tags:rename\x12\x89\x01\n" +
"\rDeleteMemoTag\x12\".memos.api.v1.DeleteMemoTagRequest\x1a\x16.google.protobuf.Empty\"<\xdaA\n" +
"parent,tag\x82\xd3\xe4\x93\x02):\x01*\"$/api/v1/{parent=memos/*}/tags:delete\x12\x8b\x01\n" +
"DeleteMemo\x12\x1f.memos.api.v1.DeleteMemoRequest\x1a\x16.google.protobuf.Empty\"%\xdaA\x04name\x82\xd3\xe4\x93\x02\x18*\x16/api/v1/{name=memos/*}\x12\x8b\x01\n" +
"\x12SetMemoAttachments\x12'.memos.api.v1.SetMemoAttachmentsRequest\x1a\x16.google.protobuf.Empty\"4\xdaA\x04name\x82\xd3\xe4\x93\x02':\x01*2\"/api/v1/{name=memos/*}/attachments\x12\x9d\x01\n" +
"\x13ListMemoAttachments\x12(.memos.api.v1.ListMemoAttachmentsRequest\x1a).memos.api.v1.ListMemoAttachmentsResponse\"1\xdaA\x04name\x82\xd3\xe4\x93\x02$\x12\"/api/v1/{name=memos/*}/attachments\x12\x85\x01\n" +
"\x10SetMemoRelations\x12%.memos.api.v1.SetMemoRelationsRequest\x1a\x16.google.protobuf.Empty\"2\xdaA\x04name\x82\xd3\xe4\x93\x02%:\x01*2 /api/v1/{name=memos/*}/relations\x12\x95\x01\n" +
@ -2203,7 +1987,7 @@ func file_api_v1_memo_service_proto_rawDescGZIP() []byte {
}
var file_api_v1_memo_service_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_api_v1_memo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 27)
var file_api_v1_memo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 25)
var file_api_v1_memo_service_proto_goTypes = []any{
(Visibility)(0), // 0: memos.api.v1.Visibility
(MemoRelation_Type)(0), // 1: memos.api.v1.MemoRelation.Type
@ -2216,96 +2000,89 @@ var file_api_v1_memo_service_proto_goTypes = []any{
(*GetMemoRequest)(nil), // 8: memos.api.v1.GetMemoRequest
(*UpdateMemoRequest)(nil), // 9: memos.api.v1.UpdateMemoRequest
(*DeleteMemoRequest)(nil), // 10: memos.api.v1.DeleteMemoRequest
(*RenameMemoTagRequest)(nil), // 11: memos.api.v1.RenameMemoTagRequest
(*DeleteMemoTagRequest)(nil), // 12: memos.api.v1.DeleteMemoTagRequest
(*SetMemoAttachmentsRequest)(nil), // 13: memos.api.v1.SetMemoAttachmentsRequest
(*ListMemoAttachmentsRequest)(nil), // 14: memos.api.v1.ListMemoAttachmentsRequest
(*ListMemoAttachmentsResponse)(nil), // 15: memos.api.v1.ListMemoAttachmentsResponse
(*MemoRelation)(nil), // 16: memos.api.v1.MemoRelation
(*SetMemoRelationsRequest)(nil), // 17: memos.api.v1.SetMemoRelationsRequest
(*ListMemoRelationsRequest)(nil), // 18: memos.api.v1.ListMemoRelationsRequest
(*ListMemoRelationsResponse)(nil), // 19: memos.api.v1.ListMemoRelationsResponse
(*CreateMemoCommentRequest)(nil), // 20: memos.api.v1.CreateMemoCommentRequest
(*ListMemoCommentsRequest)(nil), // 21: memos.api.v1.ListMemoCommentsRequest
(*ListMemoCommentsResponse)(nil), // 22: memos.api.v1.ListMemoCommentsResponse
(*ListMemoReactionsRequest)(nil), // 23: memos.api.v1.ListMemoReactionsRequest
(*ListMemoReactionsResponse)(nil), // 24: memos.api.v1.ListMemoReactionsResponse
(*UpsertMemoReactionRequest)(nil), // 25: memos.api.v1.UpsertMemoReactionRequest
(*DeleteMemoReactionRequest)(nil), // 26: memos.api.v1.DeleteMemoReactionRequest
(*Memo_Property)(nil), // 27: memos.api.v1.Memo.Property
(*MemoRelation_Memo)(nil), // 28: memos.api.v1.MemoRelation.Memo
(*timestamppb.Timestamp)(nil), // 29: google.protobuf.Timestamp
(State)(0), // 30: memos.api.v1.State
(*Attachment)(nil), // 31: memos.api.v1.Attachment
(*fieldmaskpb.FieldMask)(nil), // 32: google.protobuf.FieldMask
(*emptypb.Empty)(nil), // 33: google.protobuf.Empty
(*SetMemoAttachmentsRequest)(nil), // 11: memos.api.v1.SetMemoAttachmentsRequest
(*ListMemoAttachmentsRequest)(nil), // 12: memos.api.v1.ListMemoAttachmentsRequest
(*ListMemoAttachmentsResponse)(nil), // 13: memos.api.v1.ListMemoAttachmentsResponse
(*MemoRelation)(nil), // 14: memos.api.v1.MemoRelation
(*SetMemoRelationsRequest)(nil), // 15: memos.api.v1.SetMemoRelationsRequest
(*ListMemoRelationsRequest)(nil), // 16: memos.api.v1.ListMemoRelationsRequest
(*ListMemoRelationsResponse)(nil), // 17: memos.api.v1.ListMemoRelationsResponse
(*CreateMemoCommentRequest)(nil), // 18: memos.api.v1.CreateMemoCommentRequest
(*ListMemoCommentsRequest)(nil), // 19: memos.api.v1.ListMemoCommentsRequest
(*ListMemoCommentsResponse)(nil), // 20: memos.api.v1.ListMemoCommentsResponse
(*ListMemoReactionsRequest)(nil), // 21: memos.api.v1.ListMemoReactionsRequest
(*ListMemoReactionsResponse)(nil), // 22: memos.api.v1.ListMemoReactionsResponse
(*UpsertMemoReactionRequest)(nil), // 23: memos.api.v1.UpsertMemoReactionRequest
(*DeleteMemoReactionRequest)(nil), // 24: memos.api.v1.DeleteMemoReactionRequest
(*Memo_Property)(nil), // 25: memos.api.v1.Memo.Property
(*MemoRelation_Memo)(nil), // 26: memos.api.v1.MemoRelation.Memo
(*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp
(State)(0), // 28: memos.api.v1.State
(*Attachment)(nil), // 29: memos.api.v1.Attachment
(*fieldmaskpb.FieldMask)(nil), // 30: google.protobuf.FieldMask
(*emptypb.Empty)(nil), // 31: google.protobuf.Empty
}
var file_api_v1_memo_service_proto_depIdxs = []int32{
29, // 0: memos.api.v1.Reaction.create_time:type_name -> google.protobuf.Timestamp
30, // 1: memos.api.v1.Memo.state:type_name -> memos.api.v1.State
29, // 2: memos.api.v1.Memo.create_time:type_name -> google.protobuf.Timestamp
29, // 3: memos.api.v1.Memo.update_time:type_name -> google.protobuf.Timestamp
29, // 4: memos.api.v1.Memo.display_time:type_name -> google.protobuf.Timestamp
27, // 0: memos.api.v1.Reaction.create_time:type_name -> google.protobuf.Timestamp
28, // 1: memos.api.v1.Memo.state:type_name -> memos.api.v1.State
27, // 2: memos.api.v1.Memo.create_time:type_name -> google.protobuf.Timestamp
27, // 3: memos.api.v1.Memo.update_time:type_name -> google.protobuf.Timestamp
27, // 4: memos.api.v1.Memo.display_time:type_name -> google.protobuf.Timestamp
0, // 5: memos.api.v1.Memo.visibility:type_name -> memos.api.v1.Visibility
31, // 6: memos.api.v1.Memo.attachments:type_name -> memos.api.v1.Attachment
16, // 7: memos.api.v1.Memo.relations:type_name -> memos.api.v1.MemoRelation
29, // 6: memos.api.v1.Memo.attachments:type_name -> memos.api.v1.Attachment
14, // 7: memos.api.v1.Memo.relations:type_name -> memos.api.v1.MemoRelation
2, // 8: memos.api.v1.Memo.reactions:type_name -> memos.api.v1.Reaction
27, // 9: memos.api.v1.Memo.property:type_name -> memos.api.v1.Memo.Property
25, // 9: memos.api.v1.Memo.property:type_name -> memos.api.v1.Memo.Property
4, // 10: memos.api.v1.Memo.location:type_name -> memos.api.v1.Location
3, // 11: memos.api.v1.CreateMemoRequest.memo:type_name -> memos.api.v1.Memo
30, // 12: memos.api.v1.ListMemosRequest.state:type_name -> memos.api.v1.State
28, // 12: memos.api.v1.ListMemosRequest.state:type_name -> memos.api.v1.State
3, // 13: memos.api.v1.ListMemosResponse.memos:type_name -> memos.api.v1.Memo
32, // 14: memos.api.v1.GetMemoRequest.read_mask:type_name -> google.protobuf.FieldMask
3, // 15: memos.api.v1.UpdateMemoRequest.memo:type_name -> memos.api.v1.Memo
32, // 16: memos.api.v1.UpdateMemoRequest.update_mask:type_name -> google.protobuf.FieldMask
31, // 17: memos.api.v1.SetMemoAttachmentsRequest.attachments:type_name -> memos.api.v1.Attachment
31, // 18: memos.api.v1.ListMemoAttachmentsResponse.attachments:type_name -> memos.api.v1.Attachment
28, // 19: memos.api.v1.MemoRelation.memo:type_name -> memos.api.v1.MemoRelation.Memo
28, // 20: memos.api.v1.MemoRelation.related_memo:type_name -> memos.api.v1.MemoRelation.Memo
1, // 21: memos.api.v1.MemoRelation.type:type_name -> memos.api.v1.MemoRelation.Type
16, // 22: memos.api.v1.SetMemoRelationsRequest.relations:type_name -> memos.api.v1.MemoRelation
16, // 23: memos.api.v1.ListMemoRelationsResponse.relations:type_name -> memos.api.v1.MemoRelation
3, // 24: memos.api.v1.CreateMemoCommentRequest.comment:type_name -> memos.api.v1.Memo
3, // 25: memos.api.v1.ListMemoCommentsResponse.memos:type_name -> memos.api.v1.Memo
2, // 26: memos.api.v1.ListMemoReactionsResponse.reactions:type_name -> memos.api.v1.Reaction
2, // 27: memos.api.v1.UpsertMemoReactionRequest.reaction:type_name -> memos.api.v1.Reaction
5, // 28: memos.api.v1.MemoService.CreateMemo:input_type -> memos.api.v1.CreateMemoRequest
6, // 29: memos.api.v1.MemoService.ListMemos:input_type -> memos.api.v1.ListMemosRequest
8, // 30: memos.api.v1.MemoService.GetMemo:input_type -> memos.api.v1.GetMemoRequest
9, // 31: memos.api.v1.MemoService.UpdateMemo:input_type -> memos.api.v1.UpdateMemoRequest
10, // 32: memos.api.v1.MemoService.DeleteMemo:input_type -> memos.api.v1.DeleteMemoRequest
11, // 33: memos.api.v1.MemoService.RenameMemoTag:input_type -> memos.api.v1.RenameMemoTagRequest
12, // 34: memos.api.v1.MemoService.DeleteMemoTag:input_type -> memos.api.v1.DeleteMemoTagRequest
13, // 35: memos.api.v1.MemoService.SetMemoAttachments:input_type -> memos.api.v1.SetMemoAttachmentsRequest
14, // 36: memos.api.v1.MemoService.ListMemoAttachments:input_type -> memos.api.v1.ListMemoAttachmentsRequest
17, // 37: memos.api.v1.MemoService.SetMemoRelations:input_type -> memos.api.v1.SetMemoRelationsRequest
18, // 38: memos.api.v1.MemoService.ListMemoRelations:input_type -> memos.api.v1.ListMemoRelationsRequest
20, // 39: memos.api.v1.MemoService.CreateMemoComment:input_type -> memos.api.v1.CreateMemoCommentRequest
21, // 40: memos.api.v1.MemoService.ListMemoComments:input_type -> memos.api.v1.ListMemoCommentsRequest
23, // 41: memos.api.v1.MemoService.ListMemoReactions:input_type -> memos.api.v1.ListMemoReactionsRequest
25, // 42: memos.api.v1.MemoService.UpsertMemoReaction:input_type -> memos.api.v1.UpsertMemoReactionRequest
26, // 43: memos.api.v1.MemoService.DeleteMemoReaction:input_type -> memos.api.v1.DeleteMemoReactionRequest
3, // 44: memos.api.v1.MemoService.CreateMemo:output_type -> memos.api.v1.Memo
7, // 45: memos.api.v1.MemoService.ListMemos:output_type -> memos.api.v1.ListMemosResponse
3, // 46: memos.api.v1.MemoService.GetMemo:output_type -> memos.api.v1.Memo
3, // 47: memos.api.v1.MemoService.UpdateMemo:output_type -> memos.api.v1.Memo
33, // 48: memos.api.v1.MemoService.DeleteMemo:output_type -> google.protobuf.Empty
33, // 49: memos.api.v1.MemoService.RenameMemoTag:output_type -> google.protobuf.Empty
33, // 50: memos.api.v1.MemoService.DeleteMemoTag:output_type -> google.protobuf.Empty
33, // 51: memos.api.v1.MemoService.SetMemoAttachments:output_type -> google.protobuf.Empty
15, // 52: memos.api.v1.MemoService.ListMemoAttachments:output_type -> memos.api.v1.ListMemoAttachmentsResponse
33, // 53: memos.api.v1.MemoService.SetMemoRelations:output_type -> google.protobuf.Empty
19, // 54: memos.api.v1.MemoService.ListMemoRelations:output_type -> memos.api.v1.ListMemoRelationsResponse
3, // 55: memos.api.v1.MemoService.CreateMemoComment:output_type -> memos.api.v1.Memo
22, // 56: memos.api.v1.MemoService.ListMemoComments:output_type -> memos.api.v1.ListMemoCommentsResponse
24, // 57: memos.api.v1.MemoService.ListMemoReactions:output_type -> memos.api.v1.ListMemoReactionsResponse
2, // 58: memos.api.v1.MemoService.UpsertMemoReaction:output_type -> memos.api.v1.Reaction
33, // 59: memos.api.v1.MemoService.DeleteMemoReaction:output_type -> google.protobuf.Empty
44, // [44:60] is the sub-list for method output_type
28, // [28:44] is the sub-list for method input_type
28, // [28:28] is the sub-list for extension type_name
28, // [28:28] is the sub-list for extension extendee
0, // [0:28] is the sub-list for field type_name
3, // 14: memos.api.v1.UpdateMemoRequest.memo:type_name -> memos.api.v1.Memo
30, // 15: memos.api.v1.UpdateMemoRequest.update_mask:type_name -> google.protobuf.FieldMask
29, // 16: memos.api.v1.SetMemoAttachmentsRequest.attachments:type_name -> memos.api.v1.Attachment
29, // 17: memos.api.v1.ListMemoAttachmentsResponse.attachments:type_name -> memos.api.v1.Attachment
26, // 18: memos.api.v1.MemoRelation.memo:type_name -> memos.api.v1.MemoRelation.Memo
26, // 19: memos.api.v1.MemoRelation.related_memo:type_name -> memos.api.v1.MemoRelation.Memo
1, // 20: memos.api.v1.MemoRelation.type:type_name -> memos.api.v1.MemoRelation.Type
14, // 21: memos.api.v1.SetMemoRelationsRequest.relations:type_name -> memos.api.v1.MemoRelation
14, // 22: memos.api.v1.ListMemoRelationsResponse.relations:type_name -> memos.api.v1.MemoRelation
3, // 23: memos.api.v1.CreateMemoCommentRequest.comment:type_name -> memos.api.v1.Memo
3, // 24: memos.api.v1.ListMemoCommentsResponse.memos:type_name -> memos.api.v1.Memo
2, // 25: memos.api.v1.ListMemoReactionsResponse.reactions:type_name -> memos.api.v1.Reaction
2, // 26: memos.api.v1.UpsertMemoReactionRequest.reaction:type_name -> memos.api.v1.Reaction
5, // 27: memos.api.v1.MemoService.CreateMemo:input_type -> memos.api.v1.CreateMemoRequest
6, // 28: memos.api.v1.MemoService.ListMemos:input_type -> memos.api.v1.ListMemosRequest
8, // 29: memos.api.v1.MemoService.GetMemo:input_type -> memos.api.v1.GetMemoRequest
9, // 30: memos.api.v1.MemoService.UpdateMemo:input_type -> memos.api.v1.UpdateMemoRequest
10, // 31: memos.api.v1.MemoService.DeleteMemo:input_type -> memos.api.v1.DeleteMemoRequest
11, // 32: memos.api.v1.MemoService.SetMemoAttachments:input_type -> memos.api.v1.SetMemoAttachmentsRequest
12, // 33: memos.api.v1.MemoService.ListMemoAttachments:input_type -> memos.api.v1.ListMemoAttachmentsRequest
15, // 34: memos.api.v1.MemoService.SetMemoRelations:input_type -> memos.api.v1.SetMemoRelationsRequest
16, // 35: memos.api.v1.MemoService.ListMemoRelations:input_type -> memos.api.v1.ListMemoRelationsRequest
18, // 36: memos.api.v1.MemoService.CreateMemoComment:input_type -> memos.api.v1.CreateMemoCommentRequest
19, // 37: memos.api.v1.MemoService.ListMemoComments:input_type -> memos.api.v1.ListMemoCommentsRequest
21, // 38: memos.api.v1.MemoService.ListMemoReactions:input_type -> memos.api.v1.ListMemoReactionsRequest
23, // 39: memos.api.v1.MemoService.UpsertMemoReaction:input_type -> memos.api.v1.UpsertMemoReactionRequest
24, // 40: memos.api.v1.MemoService.DeleteMemoReaction:input_type -> memos.api.v1.DeleteMemoReactionRequest
3, // 41: memos.api.v1.MemoService.CreateMemo:output_type -> memos.api.v1.Memo
7, // 42: memos.api.v1.MemoService.ListMemos:output_type -> memos.api.v1.ListMemosResponse
3, // 43: memos.api.v1.MemoService.GetMemo:output_type -> memos.api.v1.Memo
3, // 44: memos.api.v1.MemoService.UpdateMemo:output_type -> memos.api.v1.Memo
31, // 45: memos.api.v1.MemoService.DeleteMemo:output_type -> google.protobuf.Empty
31, // 46: memos.api.v1.MemoService.SetMemoAttachments:output_type -> google.protobuf.Empty
13, // 47: memos.api.v1.MemoService.ListMemoAttachments:output_type -> memos.api.v1.ListMemoAttachmentsResponse
31, // 48: memos.api.v1.MemoService.SetMemoRelations:output_type -> google.protobuf.Empty
17, // 49: memos.api.v1.MemoService.ListMemoRelations:output_type -> memos.api.v1.ListMemoRelationsResponse
3, // 50: memos.api.v1.MemoService.CreateMemoComment:output_type -> memos.api.v1.Memo
20, // 51: memos.api.v1.MemoService.ListMemoComments:output_type -> memos.api.v1.ListMemoCommentsResponse
22, // 52: memos.api.v1.MemoService.ListMemoReactions:output_type -> memos.api.v1.ListMemoReactionsResponse
2, // 53: memos.api.v1.MemoService.UpsertMemoReaction:output_type -> memos.api.v1.Reaction
31, // 54: memos.api.v1.MemoService.DeleteMemoReaction:output_type -> google.protobuf.Empty
41, // [41:55] is the sub-list for method output_type
27, // [27:41] is the sub-list for method input_type
27, // [27:27] is the sub-list for extension type_name
27, // [27:27] is the sub-list for extension extendee
0, // [0:27] is the sub-list for field type_name
}
func init() { file_api_v1_memo_service_proto_init() }
@ -2322,7 +2099,7 @@ func file_api_v1_memo_service_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_v1_memo_service_proto_rawDesc), len(file_api_v1_memo_service_proto_rawDesc)),
NumEnums: 2,
NumMessages: 27,
NumMessages: 25,
NumExtensions: 0,
NumServices: 1,
},

@ -111,8 +111,6 @@ func local_request_MemoService_ListMemos_0(ctx context.Context, marshaler runtim
return msg, metadata, err
}
var filter_MemoService_GetMemo_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
func request_MemoService_GetMemo_0(ctx context.Context, marshaler runtime.Marshaler, client MemoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq GetMemoRequest
@ -130,12 +128,6 @@ func request_MemoService_GetMemo_0(ctx context.Context, marshaler runtime.Marsha
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_MemoService_GetMemo_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.GetMemo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
@ -154,12 +146,6 @@ func local_request_MemoService_GetMemo_0(ctx context.Context, marshaler runtime.
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_MemoService_GetMemo_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.GetMemo(ctx, &protoReq)
return msg, metadata, err
}
@ -298,96 +284,6 @@ func local_request_MemoService_DeleteMemo_0(ctx context.Context, marshaler runti
return msg, metadata, err
}
func request_MemoService_RenameMemoTag_0(ctx context.Context, marshaler runtime.Marshaler, client MemoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq RenameMemoTagRequest
metadata runtime.ServerMetadata
err error
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
val, ok := pathParams["parent"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent")
}
protoReq.Parent, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err)
}
msg, err := client.RenameMemoTag(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_MemoService_RenameMemoTag_0(ctx context.Context, marshaler runtime.Marshaler, server MemoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq RenameMemoTagRequest
metadata runtime.ServerMetadata
err error
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
val, ok := pathParams["parent"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent")
}
protoReq.Parent, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err)
}
msg, err := server.RenameMemoTag(ctx, &protoReq)
return msg, metadata, err
}
func request_MemoService_DeleteMemoTag_0(ctx context.Context, marshaler runtime.Marshaler, client MemoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq DeleteMemoTagRequest
metadata runtime.ServerMetadata
err error
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
val, ok := pathParams["parent"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent")
}
protoReq.Parent, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err)
}
msg, err := client.DeleteMemoTag(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_MemoService_DeleteMemoTag_0(ctx context.Context, marshaler runtime.Marshaler, server MemoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq DeleteMemoTagRequest
metadata runtime.ServerMetadata
err error
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
val, ok := pathParams["parent"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent")
}
protoReq.Parent, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err)
}
msg, err := server.DeleteMemoTag(ctx, &protoReq)
return msg, metadata, err
}
func request_MemoService_SetMemoAttachments_0(ctx context.Context, marshaler runtime.Marshaler, client MemoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq SetMemoAttachmentsRequest
@ -939,46 +835,6 @@ func RegisterMemoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
}
forward_MemoService_DeleteMemo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPatch, pattern_MemoService_RenameMemoTag_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)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/memos.api.v1.MemoService/RenameMemoTag", runtime.WithHTTPPathPattern("/api/v1/{parent=memos/*}/tags:rename"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_MemoService_RenameMemoTag_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_RenameMemoTag_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_MemoService_DeleteMemoTag_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)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/memos.api.v1.MemoService/DeleteMemoTag", runtime.WithHTTPPathPattern("/api/v1/{parent=memos/*}/tags:delete"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_MemoService_DeleteMemoTag_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_DeleteMemoTag_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPatch, pattern_MemoService_SetMemoAttachments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -1284,40 +1140,6 @@ func RegisterMemoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
}
forward_MemoService_DeleteMemo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPatch, pattern_MemoService_RenameMemoTag_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)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/memos.api.v1.MemoService/RenameMemoTag", runtime.WithHTTPPathPattern("/api/v1/{parent=memos/*}/tags:rename"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_MemoService_RenameMemoTag_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_RenameMemoTag_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_MemoService_DeleteMemoTag_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)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/memos.api.v1.MemoService/DeleteMemoTag", runtime.WithHTTPPathPattern("/api/v1/{parent=memos/*}/tags:delete"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_MemoService_DeleteMemoTag_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_DeleteMemoTag_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPatch, pattern_MemoService_SetMemoAttachments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -1480,8 +1302,6 @@ var (
pattern_MemoService_GetMemo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 2, 5, 3}, []string{"api", "v1", "memos", "name"}, ""))
pattern_MemoService_UpdateMemo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 2, 5, 3}, []string{"api", "v1", "memos", "memo.name"}, ""))
pattern_MemoService_DeleteMemo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 2, 5, 3}, []string{"api", "v1", "memos", "name"}, ""))
pattern_MemoService_RenameMemoTag_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", "parent", "tags"}, "rename"))
pattern_MemoService_DeleteMemoTag_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", "parent", "tags"}, "delete"))
pattern_MemoService_SetMemoAttachments_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", "attachments"}, ""))
pattern_MemoService_ListMemoAttachments_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", "attachments"}, ""))
pattern_MemoService_SetMemoRelations_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", "relations"}, ""))
@ -1499,8 +1319,6 @@ var (
forward_MemoService_GetMemo_0 = runtime.ForwardResponseMessage
forward_MemoService_UpdateMemo_0 = runtime.ForwardResponseMessage
forward_MemoService_DeleteMemo_0 = runtime.ForwardResponseMessage
forward_MemoService_RenameMemoTag_0 = runtime.ForwardResponseMessage
forward_MemoService_DeleteMemoTag_0 = runtime.ForwardResponseMessage
forward_MemoService_SetMemoAttachments_0 = runtime.ForwardResponseMessage
forward_MemoService_ListMemoAttachments_0 = runtime.ForwardResponseMessage
forward_MemoService_SetMemoRelations_0 = runtime.ForwardResponseMessage

@ -25,8 +25,6 @@ const (
MemoService_GetMemo_FullMethodName = "/memos.api.v1.MemoService/GetMemo"
MemoService_UpdateMemo_FullMethodName = "/memos.api.v1.MemoService/UpdateMemo"
MemoService_DeleteMemo_FullMethodName = "/memos.api.v1.MemoService/DeleteMemo"
MemoService_RenameMemoTag_FullMethodName = "/memos.api.v1.MemoService/RenameMemoTag"
MemoService_DeleteMemoTag_FullMethodName = "/memos.api.v1.MemoService/DeleteMemoTag"
MemoService_SetMemoAttachments_FullMethodName = "/memos.api.v1.MemoService/SetMemoAttachments"
MemoService_ListMemoAttachments_FullMethodName = "/memos.api.v1.MemoService/ListMemoAttachments"
MemoService_SetMemoRelations_FullMethodName = "/memos.api.v1.MemoService/SetMemoRelations"
@ -52,10 +50,6 @@ type MemoServiceClient interface {
UpdateMemo(ctx context.Context, in *UpdateMemoRequest, opts ...grpc.CallOption) (*Memo, error)
// DeleteMemo deletes a memo.
DeleteMemo(ctx context.Context, in *DeleteMemoRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
// RenameMemoTag renames a tag for a memo.
RenameMemoTag(ctx context.Context, in *RenameMemoTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
// DeleteMemoTag deletes a tag for a memo.
DeleteMemoTag(ctx context.Context, in *DeleteMemoTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
// SetMemoAttachments sets attachments for a memo.
SetMemoAttachments(ctx context.Context, in *SetMemoAttachmentsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
// ListMemoAttachments lists attachments for a memo.
@ -134,26 +128,6 @@ func (c *memoServiceClient) DeleteMemo(ctx context.Context, in *DeleteMemoReques
return out, nil
}
func (c *memoServiceClient) RenameMemoTag(ctx context.Context, in *RenameMemoTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, MemoService_RenameMemoTag_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *memoServiceClient) DeleteMemoTag(ctx context.Context, in *DeleteMemoTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, MemoService_DeleteMemoTag_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *memoServiceClient) SetMemoAttachments(ctx context.Context, in *SetMemoAttachmentsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
@ -258,10 +232,6 @@ type MemoServiceServer interface {
UpdateMemo(context.Context, *UpdateMemoRequest) (*Memo, error)
// DeleteMemo deletes a memo.
DeleteMemo(context.Context, *DeleteMemoRequest) (*emptypb.Empty, error)
// RenameMemoTag renames a tag for a memo.
RenameMemoTag(context.Context, *RenameMemoTagRequest) (*emptypb.Empty, error)
// DeleteMemoTag deletes a tag for a memo.
DeleteMemoTag(context.Context, *DeleteMemoTagRequest) (*emptypb.Empty, error)
// SetMemoAttachments sets attachments for a memo.
SetMemoAttachments(context.Context, *SetMemoAttachmentsRequest) (*emptypb.Empty, error)
// ListMemoAttachments lists attachments for a memo.
@ -305,12 +275,6 @@ func (UnimplementedMemoServiceServer) UpdateMemo(context.Context, *UpdateMemoReq
func (UnimplementedMemoServiceServer) DeleteMemo(context.Context, *DeleteMemoRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteMemo not implemented")
}
func (UnimplementedMemoServiceServer) RenameMemoTag(context.Context, *RenameMemoTagRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method RenameMemoTag not implemented")
}
func (UnimplementedMemoServiceServer) DeleteMemoTag(context.Context, *DeleteMemoTagRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteMemoTag not implemented")
}
func (UnimplementedMemoServiceServer) SetMemoAttachments(context.Context, *SetMemoAttachmentsRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetMemoAttachments not implemented")
}
@ -449,42 +413,6 @@ func _MemoService_DeleteMemo_Handler(srv interface{}, ctx context.Context, dec f
return interceptor(ctx, in, info, handler)
}
func _MemoService_RenameMemoTag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(RenameMemoTagRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MemoServiceServer).RenameMemoTag(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: MemoService_RenameMemoTag_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MemoServiceServer).RenameMemoTag(ctx, req.(*RenameMemoTagRequest))
}
return interceptor(ctx, in, info, handler)
}
func _MemoService_DeleteMemoTag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DeleteMemoTagRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MemoServiceServer).DeleteMemoTag(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: MemoService_DeleteMemoTag_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MemoServiceServer).DeleteMemoTag(ctx, req.(*DeleteMemoTagRequest))
}
return interceptor(ctx, in, info, handler)
}
func _MemoService_SetMemoAttachments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SetMemoAttachmentsRequest)
if err := dec(in); err != nil {
@ -674,14 +602,6 @@ var MemoService_ServiceDesc = grpc.ServiceDesc{
MethodName: "DeleteMemo",
Handler: _MemoService_DeleteMemo_Handler,
},
{
MethodName: "RenameMemoTag",
Handler: _MemoService_RenameMemoTag_Handler,
},
{
MethodName: "DeleteMemoTag",
Handler: _MemoService_DeleteMemoTag_Handler,
},
{
MethodName: "SetMemoAttachments",
Handler: _MemoService_SetMemoAttachments_Handler,

@ -592,16 +592,6 @@ paths:
If empty, a unique ID will be generated.
schema:
type: string
- name: validateOnly
in: query
description: Optional. If set, validate the request but don't actually create the memo.
schema:
type: boolean
- name: requestId
in: query
description: Optional. An idempotency token.
schema:
type: string
requestBody:
content:
application/json:
@ -634,14 +624,6 @@ paths:
required: true
schema:
type: string
- name: readMask
in: query
description: |-
Optional. The fields to return in the response.
If not specified, all fields are returned.
schema:
type: string
format: field-mask
responses:
"200":
description: OK
@ -700,11 +682,6 @@ paths:
schema:
type: string
format: field-mask
- name: allowMissing
in: query
description: Optional. If set to true, allows updating sensitive fields.
schema:
type: boolean
requestBody:
content:
application/json:
@ -1000,64 +977,6 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Status'
/api/v1/memos/{memo}/tags:delete:
post:
tags:
- MemoService
description: DeleteMemoTag deletes a tag for a memo.
operationId: MemoService_DeleteMemoTag
parameters:
- name: memo
in: path
description: The memo id.
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteMemoTagRequest'
required: true
responses:
"200":
description: OK
content: {}
default:
description: Default error response
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
/api/v1/memos/{memo}/tags:rename:
patch:
tags:
- MemoService
description: RenameMemoTag renames a tag for a memo.
operationId: MemoService_RenameMemoTag
parameters:
- name: memo
in: path
description: The memo id.
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RenameMemoTagRequest'
required: true
responses:
"200":
description: OK
content: {}
default:
description: Default error response
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
/api/v1/reactions/{reaction}:
delete:
tags:
@ -2269,23 +2188,6 @@ components:
Last time the session was accessed.
Used for sliding expiration calculation (last_accessed_time + 2 weeks).
format: date-time
DeleteMemoTagRequest:
required:
- parent
- tag
type: object
properties:
parent:
type: string
description: |-
Required. The parent, who owns the tags.
Format: memos/{memo}. Use "memos/-" to delete all tags.
tag:
type: string
description: Required. The tag name to delete.
deleteRelatedMemos:
type: boolean
description: Optional. Whether to delete related memos.
FieldMapping:
type: object
properties:
@ -2483,10 +2385,6 @@ components:
nextPageToken:
type: string
description: A token for the next page of results.
totalSize:
type: integer
description: The total count of attachments.
format: int32
ListMemoCommentsResponse:
type: object
properties:
@ -2528,10 +2426,6 @@ components:
nextPageToken:
type: string
description: A token for the next page of results.
totalSize:
type: integer
description: The total count of relations.
format: int32
ListMemosResponse:
type: object
properties:
@ -2545,10 +2439,6 @@ components:
description: |-
A token that can be sent as `page_token` to retrieve the next page.
If this field is omitted, there are no subsequent pages.
totalSize:
type: integer
description: The total count of memos (may be approximate).
format: int32
ListShortcutsResponse:
type: object
properties:
@ -2833,24 +2723,6 @@ components:
type: string
description: Output only. The creation timestamp.
format: date-time
RenameMemoTagRequest:
required:
- parent
- oldTag
- newTag
type: object
properties:
parent:
type: string
description: |-
Required. The parent, who owns the tags.
Format: memos/{memo}. Use "memos/-" to rename all tags.
oldTag:
type: string
description: Required. The old tag name to rename.
newTag:
type: string
description: Required. The new tag name.
SetMemoAttachmentsRequest:
required:
- name

@ -679,104 +679,6 @@ func (s *APIV1Service) ListMemoComments(ctx context.Context, request *v1pb.ListM
return response, nil
}
func (s *APIV1Service) RenameMemoTag(ctx context.Context, request *v1pb.RenameMemoTagRequest) (*emptypb.Empty, error) {
user, err := s.GetCurrentUser(ctx)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get current user")
}
if user == nil {
return nil, status.Errorf(codes.Unauthenticated, "user not authenticated")
}
memoFind := &store.FindMemo{
CreatorID: &user.ID,
Filters: []string{fmt.Sprintf("tag in [\"%s\"]", request.OldTag)},
ExcludeComments: true,
}
if (request.Parent) != "memos/-" {
memoUID, err := ExtractMemoUIDFromName(request.Parent)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "invalid memo name: %v", err)
}
memoFind.UID = &memoUID
}
memos, err := s.Store.ListMemos(ctx, memoFind)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to list memos")
}
for _, memo := range memos {
// Rename tag using goldmark
newContent, err := s.MarkdownService.RenameTag([]byte(memo.Content), request.OldTag, request.NewTag)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to rename tag: %v", err)
}
memo.Content = newContent
if err := memopayload.RebuildMemoPayload(memo, s.MarkdownService); err != nil {
return nil, status.Errorf(codes.Internal, "failed to rebuild memo payload: %v", err)
}
if err := s.Store.UpdateMemo(ctx, &store.UpdateMemo{
ID: memo.ID,
Content: &memo.Content,
Payload: memo.Payload,
}); err != nil {
return nil, status.Errorf(codes.Internal, "failed to update memo: %v", err)
}
}
return &emptypb.Empty{}, nil
}
func (s *APIV1Service) DeleteMemoTag(ctx context.Context, request *v1pb.DeleteMemoTagRequest) (*emptypb.Empty, error) {
user, err := s.GetCurrentUser(ctx)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get current user")
}
if user == nil {
return nil, status.Errorf(codes.Unauthenticated, "user not authenticated")
}
memoFind := &store.FindMemo{
CreatorID: &user.ID,
Filters: []string{fmt.Sprintf("tag in [\"%s\"]", request.Tag)},
ExcludeContent: true,
ExcludeComments: true,
}
if request.Parent != "memos/-" {
memoUID, err := ExtractMemoUIDFromName(request.Parent)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "invalid memo name: %v", err)
}
memoFind.UID = &memoUID
}
memos, err := s.Store.ListMemos(ctx, memoFind)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to list memos")
}
for _, memo := range memos {
if request.DeleteRelatedMemos {
err := s.Store.DeleteMemo(ctx, &store.DeleteMemo{ID: memo.ID})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to delete memo")
}
} else {
archived := store.Archived
err := s.Store.UpdateMemo(ctx, &store.UpdateMemo{
ID: memo.ID,
RowStatus: &archived,
})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to update memo")
}
}
}
return &emptypb.Empty{}, nil
}
func (s *APIV1Service) getContentLengthLimit(ctx context.Context) (int, error) {
workspaceMemoRelatedSetting, err := s.Store.GetWorkspaceMemoRelatedSetting(ctx)

@ -1,19 +1,12 @@
import { Edit3Icon, HashIcon, MoreVerticalIcon, TagsIcon, TrashIcon } from "lucide-react";
import { HashIcon, MoreVerticalIcon, TagsIcon } from "lucide-react";
import { observer } from "mobx-react-lite";
import { useState } from "react";
import toast from "react-hot-toast";
import useLocalStorage from "react-use/lib/useLocalStorage";
import ConfirmDialog from "@/components/ConfirmDialog";
import { Switch } from "@/components/ui/switch";
import { memoServiceClient } from "@/grpcweb";
import { useDialog } from "@/hooks/useDialog";
import { cn } from "@/lib/utils";
import { userStore } from "@/store";
import memoFilterStore, { MemoFilter } from "@/store/memoFilter";
import { useTranslate } from "@/utils/i18n";
import RenameTagDialog from "../RenameTagDialog";
import TagTree from "../TagTree";
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "../ui/dropdown-menu";
import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover";
interface Props {
@ -24,9 +17,6 @@ const TagsSection = observer((props: Props) => {
const t = useTranslate();
const [treeMode, setTreeMode] = useLocalStorage<boolean>("tag-view-as-tree", false);
const [treeAutoExpand, setTreeAutoExpand] = useLocalStorage<boolean>("tag-tree-auto-expand", false);
const renameTagDialog = useDialog();
const [selectedTag, setSelectedTag] = useState<string>("");
const [deleteTagName, setDeleteTagName] = useState<string | undefined>(undefined);
const tags = Object.entries(userStore.state.tagCount)
.sort((a, b) => a[0].localeCompare(b[0]))
.sort((a, b) => b[1] - a[1]);
@ -43,38 +33,14 @@ const TagsSection = observer((props: Props) => {
}
};
const handleRenameTag = (tag: string) => {
setSelectedTag(tag);
renameTagDialog.open();
};
const handleRenameSuccess = () => {
// Refresh tags after rename
userStore.fetchUsers();
};
const handleDeleteTag = async (tag: string) => {
setDeleteTagName(tag);
};
const confirmDeleteTag = async () => {
if (!deleteTagName) return;
await memoServiceClient.deleteMemoTag({
parent: "memos/-",
tag: deleteTagName,
});
toast.success(t("tag.delete-success"));
setDeleteTagName(undefined);
};
return (
<div className="flex flex-col justify-start items-start w-full mt-3 px-1 h-auto shrink-0 flex-nowrap hide-scrollbar">
<div className="w-full flex flex-col justify-start items-start mt-3 px-1 h-auto shrink-0 flex-nowrap hide-scrollbar">
<div className="flex flex-row justify-between items-center w-full gap-1 mb-1 text-sm leading-6 text-muted-foreground select-none">
<span>{t("common.tags")}</span>
{tags.length > 0 && (
<Popover>
<PopoverTrigger>
<MoreVerticalIcon className="w-4 h-auto shrink-0 text-muted-foreground" />
<MoreVerticalIcon className="w-4 h-auto shrink-0 text-muted-foreground cursor-pointer hover:text-foreground" />
</PopoverTrigger>
<PopoverContent align="end" alignOffset={-12}>
<div className="w-auto flex flex-row justify-between items-center gap-2 p-1">
@ -93,66 +59,37 @@ const TagsSection = observer((props: Props) => {
treeMode ? (
<TagTree tagAmounts={tags} expandSubTags={!!treeAutoExpand} />
) : (
<div className="w-full flex flex-row justify-start items-center relative flex-wrap gap-x-2 gap-y-1">
{tags.map(([tag, amount]) => (
<div
key={tag}
className="shrink-0 w-auto max-w-full text-sm rounded-md leading-6 flex flex-row justify-start items-center select-none hover:opacity-80 text-muted-foreground"
>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<div className="shrink-0 group cursor-pointer">
<HashIcon className="group-hover:hidden w-4 h-auto shrink-0 text-muted-foreground" />
<MoreVerticalIcon className="hidden group-hover:block w-4 h-auto shrink-0 text-muted-foreground" />
</div>
</DropdownMenuTrigger>
<DropdownMenuContent align="start" sideOffset={2}>
<DropdownMenuItem onClick={() => handleRenameTag(tag)}>
<Edit3Icon className="w-4 h-auto" />
{t("common.rename")}
</DropdownMenuItem>
<DropdownMenuItem onClick={() => handleDeleteTag(tag)}>
<TrashIcon className="w-4 h-auto" />
{t("common.delete")}
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
<div className="w-full flex flex-row justify-start items-center relative flex-wrap gap-x-2 gap-y-1.5">
{tags.map(([tag, amount]) => {
const isActive = memoFilterStore.getFiltersByFactor("tagSearch").some((filter: MemoFilter) => filter.value === tag);
return (
<div
className={cn("inline-flex flex-nowrap ml-0.5 gap-0.5 cursor-pointer max-w-[calc(100%-16px)]")}
key={tag}
className={cn(
"shrink-0 w-auto max-w-full text-sm rounded-md leading-6 flex flex-row justify-start items-center select-none cursor-pointer transition-colors",
"hover:opacity-80",
isActive ? "text-primary" : "text-muted-foreground",
)}
onClick={() => handleTagClick(tag)}
>
<span className="truncate opacity-80">{tag}</span>
{amount > 1 && <span className="opacity-60 shrink-0">({amount})</span>}
<HashIcon className="w-4 h-auto shrink-0" />
<div className="inline-flex flex-nowrap ml-0.5 gap-0.5 max-w-[calc(100%-16px)]">
<span className={cn("truncate", isActive ? "font-medium" : "")}>{tag}</span>
{amount > 1 && <span className="opacity-60 shrink-0">({amount})</span>}
</div>
</div>
</div>
))}
);
})}
</div>
)
) : (
!props.readonly && (
<div className="p-2 border border-dashed rounded-md flex flex-row justify-start items-start gap-1 text-muted-foreground">
<TagsIcon />
<p className="mt-0.5 text-sm leading-snug italic">{t("tag.create-tags-guide")}</p>
<div className="p-2 border border-dashed rounded-md flex flex-row justify-start items-start gap-2 text-muted-foreground">
<TagsIcon className="w-5 h-5 shrink-0" />
<p className="text-sm leading-snug italic">{t("tag.create-tags-guide")}</p>
</div>
)
)}
{/* Rename Tag Dialog */}
<RenameTagDialog
open={renameTagDialog.isOpen}
onOpenChange={renameTagDialog.setOpen}
tag={selectedTag}
onSuccess={handleRenameSuccess}
/>
<ConfirmDialog
open={!!deleteTagName}
onOpenChange={(open) => !open && setDeleteTagName(undefined)}
title={t("tag.delete-confirm")}
confirmLabel={t("common.delete")}
cancelLabel={t("common.cancel")}
onConfirm={confirmDeleteTag}
confirmVariant="destructive"
/>
</div>
);
});

@ -1,89 +0,0 @@
import React, { useState } from "react";
import { toast } from "react-hot-toast";
import { Button } from "@/components/ui/button";
import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { memoServiceClient } from "@/grpcweb";
import useLoading from "@/hooks/useLoading";
import { useTranslate } from "@/utils/i18n";
interface Props {
open: boolean;
onOpenChange: (open: boolean) => void;
tag: string;
onSuccess?: () => void;
}
function RenameTagDialog({ open, onOpenChange, tag, onSuccess }: Props) {
const t = useTranslate();
const [newName, setNewName] = useState(tag);
const requestState = useLoading(false);
const handleTagNameInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setNewName(e.target.value.trim());
};
const handleConfirm = async () => {
if (!newName || newName.includes(" ")) {
toast.error(t("tag.rename-error-empty"));
return;
}
if (newName === tag) {
toast.error(t("tag.rename-error-repeat"));
return;
}
try {
requestState.setLoading();
await memoServiceClient.renameMemoTag({
parent: "memos/-",
oldTag: tag,
newTag: newName,
});
toast.success(t("tag.rename-success"));
requestState.setFinish();
onSuccess?.();
onOpenChange(false);
} catch (error: any) {
console.error(error);
toast.error(error.details);
requestState.setError();
}
};
return (
<Dialog open={open} onOpenChange={onOpenChange}>
<DialogContent className="max-w-md">
<DialogHeader>
<DialogTitle>{t("tag.rename-tag")}</DialogTitle>
</DialogHeader>
<div className="flex flex-col gap-4">
<div className="grid gap-2">
<Label htmlFor="oldName">{t("tag.old-name")}</Label>
<Input id="oldName" readOnly disabled type="text" value={tag} />
</div>
<div className="grid gap-2">
<Label htmlFor="newName">{t("tag.new-name")}</Label>
<Input id="newName" type="text" placeholder="A new tag name" value={newName} onChange={handleTagNameInputChange} />
</div>
<div className="text-sm text-muted-foreground">
<ul className="list-disc list-inside">
<li>{t("tag.rename-tip")}</li>
</ul>
</div>
</div>
<DialogFooter>
<Button variant="ghost" disabled={requestState.isLoading} onClick={() => onOpenChange(false)}>
{t("common.cancel")}
</Button>
<Button disabled={requestState.isLoading} onClick={handleConfirm}>
{t("common.confirm")}
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
);
}
export default RenameTagDialog;

@ -115,26 +115,27 @@ const TagItemContainer = observer((props: TagItemContainerProps) => {
return (
<>
<div className="relative flex flex-row justify-between items-center w-full leading-6 py-0 mt-px rounded-lg text-sm select-none shrink-0">
<div className="relative flex flex-row justify-between items-center w-full leading-6 py-0 mt-px text-sm select-none shrink-0">
<div
className={`flex flex-row justify-start items-center truncate shrink leading-5 mr-1 text-muted-foreground ${
isActive && "text-primary!"
className={`flex flex-row justify-start items-center truncate shrink leading-5 mr-1 cursor-pointer transition-colors ${
isActive ? "text-primary" : "text-muted-foreground"
}`}
onClick={handleTagClick}
>
<div className="shrink-0">
<HashIcon className="w-4 h-auto shrink-0 mr-1 text-muted-foreground" />
</div>
<span className="truncate cursor-pointer hover:opacity-80" onClick={handleTagClick}>
{tag.key} {tag.amount > 1 && `(${tag.amount})`}
<HashIcon className="w-4 h-auto shrink-0 mr-1" />
<span className={`truncate hover:opacity-80 ${isActive ? "font-medium" : ""}`}>
{tag.key} {tag.amount > 1 && <span className="opacity-60">({tag.amount})</span>}
</span>
</div>
<div className="flex flex-row justify-end items-center">
{hasSubTags ? (
<span
className={`flex flex-row justify-center items-center w-6 h-6 shrink-0 transition-all rotate-0 ${showSubTags && "rotate-90"}`}
className={`flex flex-row justify-center items-center w-6 h-6 shrink-0 transition-all rotate-0 cursor-pointer ${
showSubTags && "rotate-90"
}`}
onClick={handleToggleBtnClick}
>
<ChevronRightIcon className="w-5 h-5 cursor-pointer text-muted-foreground" />
<ChevronRightIcon className="w-5 h-5 text-muted-foreground hover:text-foreground" />
</span>
) : null}
</div>
@ -142,7 +143,7 @@ const TagItemContainer = observer((props: TagItemContainerProps) => {
{hasSubTags ? (
<div
className={`w-[calc(100%-0.5rem)] flex flex-col justify-start items-start h-auto ml-2 pl-2 border-l-2 border-l-border ${
!showSubTags && "hidden!"
!showSubTags && "hidden"
}`}
>
{tag.subTags.map((st, idx) => (

@ -111,8 +111,8 @@ const UserMenu = observer((props: Props) => {
<DropdownMenuSubContent className="max-h-[90vh] overflow-y-auto">
{locales.map((locale) => (
<DropdownMenuItem key={locale} onClick={() => handleLocaleChange(locale)}>
{currentLocale === locale && <CheckIcon className="w-4 h-auto mr-2" />}
{currentLocale !== locale && <span className="w-4 mr-2" />}
{currentLocale === locale && <CheckIcon className="w-4 h-auto" />}
{currentLocale !== locale && <span className="w-4" />}
{getLocaleDisplayName(locale)}
</DropdownMenuItem>
))}
@ -126,8 +126,8 @@ const UserMenu = observer((props: Props) => {
<DropdownMenuSubContent>
{THEME_OPTIONS.map((option) => (
<DropdownMenuItem key={option.value} onClick={() => handleThemeChange(option.value)}>
{currentTheme === option.value && <CheckIcon className="w-4 h-auto mr-2" />}
{currentTheme !== option.value && <span className="w-4 mr-2" />}
{currentTheme === option.value && <CheckIcon className="w-4 h-auto" />}
{currentTheme !== option.value && <span className="w-4" />}
{option.label}
</DropdownMenuItem>
))}

@ -165,10 +165,6 @@ export interface CreateMemoRequest {
* If empty, a unique ID will be generated.
*/
memoId: string;
/** Optional. If set, validate the request but don't actually create the memo. */
validateOnly: boolean;
/** Optional. An idempotency token. */
requestId: string;
}
export interface ListMemosRequest {
@ -215,8 +211,6 @@ export interface ListMemosResponse {
* If this field is omitted, there are no subsequent pages.
*/
nextPageToken: string;
/** The total count of memos (may be approximate). */
totalSize: number;
}
export interface GetMemoRequest {
@ -225,11 +219,6 @@ export interface GetMemoRequest {
* Format: memos/{memo}
*/
name: string;
/**
* Optional. The fields to return in the response.
* If not specified, all fields are returned.
*/
readMask?: string[] | undefined;
}
export interface UpdateMemoRequest {
@ -241,11 +230,7 @@ export interface UpdateMemoRequest {
| Memo
| undefined;
/** Required. The list of fields to update. */
updateMask?:
| string[]
| undefined;
/** Optional. If set to true, allows updating sensitive fields. */
allowMissing: boolean;
updateMask?: string[] | undefined;
}
export interface DeleteMemoRequest {
@ -258,30 +243,6 @@ export interface DeleteMemoRequest {
force: boolean;
}
export interface RenameMemoTagRequest {
/**
* Required. The parent, who owns the tags.
* Format: memos/{memo}. Use "memos/-" to rename all tags.
*/
parent: string;
/** Required. The old tag name to rename. */
oldTag: string;
/** Required. The new tag name. */
newTag: string;
}
export interface DeleteMemoTagRequest {
/**
* Required. The parent, who owns the tags.
* Format: memos/{memo}. Use "memos/-" to delete all tags.
*/
parent: string;
/** Required. The tag name to delete. */
tag: string;
/** Optional. Whether to delete related memos. */
deleteRelatedMemos: boolean;
}
export interface SetMemoAttachmentsRequest {
/**
* Required. The resource name of the memo.
@ -309,8 +270,6 @@ export interface ListMemoAttachmentsResponse {
attachments: Attachment[];
/** A token for the next page of results. */
nextPageToken: string;
/** The total count of attachments. */
totalSize: number;
}
export interface MemoRelation {
@ -401,8 +360,6 @@ export interface ListMemoRelationsResponse {
relations: MemoRelation[];
/** A token for the next page of results. */
nextPageToken: string;
/** The total count of relations. */
totalSize: number;
}
export interface CreateMemoCommentRequest {
@ -988,7 +945,7 @@ export const Location: MessageFns<Location> = {
};
function createBaseCreateMemoRequest(): CreateMemoRequest {
return { memo: undefined, memoId: "", validateOnly: false, requestId: "" };
return { memo: undefined, memoId: "" };
}
export const CreateMemoRequest: MessageFns<CreateMemoRequest> = {
@ -999,12 +956,6 @@ export const CreateMemoRequest: MessageFns<CreateMemoRequest> = {
if (message.memoId !== "") {
writer.uint32(18).string(message.memoId);
}
if (message.validateOnly !== false) {
writer.uint32(24).bool(message.validateOnly);
}
if (message.requestId !== "") {
writer.uint32(34).string(message.requestId);
}
return writer;
},
@ -1031,22 +982,6 @@ export const CreateMemoRequest: MessageFns<CreateMemoRequest> = {
message.memoId = reader.string();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.validateOnly = reader.bool();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.requestId = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
@ -1063,8 +998,6 @@ export const CreateMemoRequest: MessageFns<CreateMemoRequest> = {
const message = createBaseCreateMemoRequest();
message.memo = (object.memo !== undefined && object.memo !== null) ? Memo.fromPartial(object.memo) : undefined;
message.memoId = object.memoId ?? "";
message.validateOnly = object.validateOnly ?? false;
message.requestId = object.requestId ?? "";
return message;
},
};
@ -1176,7 +1109,7 @@ export const ListMemosRequest: MessageFns<ListMemosRequest> = {
};
function createBaseListMemosResponse(): ListMemosResponse {
return { memos: [], nextPageToken: "", totalSize: 0 };
return { memos: [], nextPageToken: "" };
}
export const ListMemosResponse: MessageFns<ListMemosResponse> = {
@ -1187,9 +1120,6 @@ export const ListMemosResponse: MessageFns<ListMemosResponse> = {
if (message.nextPageToken !== "") {
writer.uint32(18).string(message.nextPageToken);
}
if (message.totalSize !== 0) {
writer.uint32(24).int32(message.totalSize);
}
return writer;
},
@ -1216,14 +1146,6 @@ export const ListMemosResponse: MessageFns<ListMemosResponse> = {
message.nextPageToken = reader.string();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.totalSize = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
@ -1240,13 +1162,12 @@ export const ListMemosResponse: MessageFns<ListMemosResponse> = {
const message = createBaseListMemosResponse();
message.memos = object.memos?.map((e) => Memo.fromPartial(e)) || [];
message.nextPageToken = object.nextPageToken ?? "";
message.totalSize = object.totalSize ?? 0;
return message;
},
};
function createBaseGetMemoRequest(): GetMemoRequest {
return { name: "", readMask: undefined };
return { name: "" };
}
export const GetMemoRequest: MessageFns<GetMemoRequest> = {
@ -1254,9 +1175,6 @@ export const GetMemoRequest: MessageFns<GetMemoRequest> = {
if (message.name !== "") {
writer.uint32(10).string(message.name);
}
if (message.readMask !== undefined) {
FieldMask.encode(FieldMask.wrap(message.readMask), writer.uint32(18).fork()).join();
}
return writer;
},
@ -1275,14 +1193,6 @@ export const GetMemoRequest: MessageFns<GetMemoRequest> = {
message.name = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.readMask = FieldMask.unwrap(FieldMask.decode(reader, reader.uint32()));
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
@ -1298,13 +1208,12 @@ export const GetMemoRequest: MessageFns<GetMemoRequest> = {
fromPartial(object: DeepPartial<GetMemoRequest>): GetMemoRequest {
const message = createBaseGetMemoRequest();
message.name = object.name ?? "";
message.readMask = object.readMask ?? undefined;
return message;
},
};
function createBaseUpdateMemoRequest(): UpdateMemoRequest {
return { memo: undefined, updateMask: undefined, allowMissing: false };
return { memo: undefined, updateMask: undefined };
}
export const UpdateMemoRequest: MessageFns<UpdateMemoRequest> = {
@ -1315,9 +1224,6 @@ export const UpdateMemoRequest: MessageFns<UpdateMemoRequest> = {
if (message.updateMask !== undefined) {
FieldMask.encode(FieldMask.wrap(message.updateMask), writer.uint32(18).fork()).join();
}
if (message.allowMissing !== false) {
writer.uint32(24).bool(message.allowMissing);
}
return writer;
},
@ -1344,14 +1250,6 @@ export const UpdateMemoRequest: MessageFns<UpdateMemoRequest> = {
message.updateMask = FieldMask.unwrap(FieldMask.decode(reader, reader.uint32()));
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.allowMissing = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
@ -1368,7 +1266,6 @@ export const UpdateMemoRequest: MessageFns<UpdateMemoRequest> = {
const message = createBaseUpdateMemoRequest();
message.memo = (object.memo !== undefined && object.memo !== null) ? Memo.fromPartial(object.memo) : undefined;
message.updateMask = object.updateMask ?? undefined;
message.allowMissing = object.allowMissing ?? false;
return message;
},
};
@ -1431,146 +1328,6 @@ export const DeleteMemoRequest: MessageFns<DeleteMemoRequest> = {
},
};
function createBaseRenameMemoTagRequest(): RenameMemoTagRequest {
return { parent: "", oldTag: "", newTag: "" };
}
export const RenameMemoTagRequest: MessageFns<RenameMemoTagRequest> = {
encode(message: RenameMemoTagRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
if (message.parent !== "") {
writer.uint32(10).string(message.parent);
}
if (message.oldTag !== "") {
writer.uint32(18).string(message.oldTag);
}
if (message.newTag !== "") {
writer.uint32(26).string(message.newTag);
}
return writer;
},
decode(input: BinaryReader | Uint8Array, length?: number): RenameMemoTagRequest {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
let end = length === undefined ? reader.len : reader.pos + length;
const message = createBaseRenameMemoTagRequest();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.parent = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.oldTag = reader.string();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.newTag = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
create(base?: DeepPartial<RenameMemoTagRequest>): RenameMemoTagRequest {
return RenameMemoTagRequest.fromPartial(base ?? {});
},
fromPartial(object: DeepPartial<RenameMemoTagRequest>): RenameMemoTagRequest {
const message = createBaseRenameMemoTagRequest();
message.parent = object.parent ?? "";
message.oldTag = object.oldTag ?? "";
message.newTag = object.newTag ?? "";
return message;
},
};
function createBaseDeleteMemoTagRequest(): DeleteMemoTagRequest {
return { parent: "", tag: "", deleteRelatedMemos: false };
}
export const DeleteMemoTagRequest: MessageFns<DeleteMemoTagRequest> = {
encode(message: DeleteMemoTagRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
if (message.parent !== "") {
writer.uint32(10).string(message.parent);
}
if (message.tag !== "") {
writer.uint32(18).string(message.tag);
}
if (message.deleteRelatedMemos !== false) {
writer.uint32(24).bool(message.deleteRelatedMemos);
}
return writer;
},
decode(input: BinaryReader | Uint8Array, length?: number): DeleteMemoTagRequest {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
let end = length === undefined ? reader.len : reader.pos + length;
const message = createBaseDeleteMemoTagRequest();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.parent = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.tag = reader.string();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.deleteRelatedMemos = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
create(base?: DeepPartial<DeleteMemoTagRequest>): DeleteMemoTagRequest {
return DeleteMemoTagRequest.fromPartial(base ?? {});
},
fromPartial(object: DeepPartial<DeleteMemoTagRequest>): DeleteMemoTagRequest {
const message = createBaseDeleteMemoTagRequest();
message.parent = object.parent ?? "";
message.tag = object.tag ?? "";
message.deleteRelatedMemos = object.deleteRelatedMemos ?? false;
return message;
},
};
function createBaseSetMemoAttachmentsRequest(): SetMemoAttachmentsRequest {
return { name: "", attachments: [] };
}
@ -1700,7 +1457,7 @@ export const ListMemoAttachmentsRequest: MessageFns<ListMemoAttachmentsRequest>
};
function createBaseListMemoAttachmentsResponse(): ListMemoAttachmentsResponse {
return { attachments: [], nextPageToken: "", totalSize: 0 };
return { attachments: [], nextPageToken: "" };
}
export const ListMemoAttachmentsResponse: MessageFns<ListMemoAttachmentsResponse> = {
@ -1711,9 +1468,6 @@ export const ListMemoAttachmentsResponse: MessageFns<ListMemoAttachmentsResponse
if (message.nextPageToken !== "") {
writer.uint32(18).string(message.nextPageToken);
}
if (message.totalSize !== 0) {
writer.uint32(24).int32(message.totalSize);
}
return writer;
},
@ -1740,14 +1494,6 @@ export const ListMemoAttachmentsResponse: MessageFns<ListMemoAttachmentsResponse
message.nextPageToken = reader.string();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.totalSize = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
@ -1764,7 +1510,6 @@ export const ListMemoAttachmentsResponse: MessageFns<ListMemoAttachmentsResponse
const message = createBaseListMemoAttachmentsResponse();
message.attachments = object.attachments?.map((e) => Attachment.fromPartial(e)) || [];
message.nextPageToken = object.nextPageToken ?? "";
message.totalSize = object.totalSize ?? 0;
return message;
},
};
@ -2030,7 +1775,7 @@ export const ListMemoRelationsRequest: MessageFns<ListMemoRelationsRequest> = {
};
function createBaseListMemoRelationsResponse(): ListMemoRelationsResponse {
return { relations: [], nextPageToken: "", totalSize: 0 };
return { relations: [], nextPageToken: "" };
}
export const ListMemoRelationsResponse: MessageFns<ListMemoRelationsResponse> = {
@ -2041,9 +1786,6 @@ export const ListMemoRelationsResponse: MessageFns<ListMemoRelationsResponse> =
if (message.nextPageToken !== "") {
writer.uint32(18).string(message.nextPageToken);
}
if (message.totalSize !== 0) {
writer.uint32(24).int32(message.totalSize);
}
return writer;
},
@ -2070,14 +1812,6 @@ export const ListMemoRelationsResponse: MessageFns<ListMemoRelationsResponse> =
message.nextPageToken = reader.string();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.totalSize = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
@ -2094,7 +1828,6 @@ export const ListMemoRelationsResponse: MessageFns<ListMemoRelationsResponse> =
const message = createBaseListMemoRelationsResponse();
message.relations = object.relations?.map((e) => MemoRelation.fromPartial(e)) || [];
message.nextPageToken = object.nextPageToken ?? "";
message.totalSize = object.totalSize ?? 0;
return message;
},
};
@ -2764,150 +2497,6 @@ export const MemoServiceDefinition = {
},
},
},
/** RenameMemoTag renames a tag for a memo. */
renameMemoTag: {
name: "RenameMemoTag",
requestType: RenameMemoTagRequest,
requestStream: false,
responseType: Empty,
responseStream: false,
options: {
_unknownFields: {
8410: [
new Uint8Array([
22,
112,
97,
114,
101,
110,
116,
44,
111,
108,
100,
95,
116,
97,
103,
44,
110,
101,
119,
95,
116,
97,
103,
]),
],
578365826: [
new Uint8Array([
41,
58,
1,
42,
50,
36,
47,
97,
112,
105,
47,
118,
49,
47,
123,
112,
97,
114,
101,
110,
116,
61,
109,
101,
109,
111,
115,
47,
42,
125,
47,
116,
97,
103,
115,
58,
114,
101,
110,
97,
109,
101,
]),
],
},
},
},
/** DeleteMemoTag deletes a tag for a memo. */
deleteMemoTag: {
name: "DeleteMemoTag",
requestType: DeleteMemoTagRequest,
requestStream: false,
responseType: Empty,
responseStream: false,
options: {
_unknownFields: {
8410: [new Uint8Array([10, 112, 97, 114, 101, 110, 116, 44, 116, 97, 103])],
578365826: [
new Uint8Array([
41,
58,
1,
42,
34,
36,
47,
97,
112,
105,
47,
118,
49,
47,
123,
112,
97,
114,
101,
110,
116,
61,
109,
101,
109,
111,
115,
47,
42,
125,
47,
116,
97,
103,
115,
58,
100,
101,
108,
101,
116,
101,
]),
],
},
},
},
/** SetMemoAttachments sets attachments for a memo. */
setMemoAttachments: {
name: "SetMemoAttachments",

Loading…
Cancel
Save