Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
ed23cbc0
Commit
ed23cbc0
authored
Jul 23, 2025
by
johnnyjoy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor: memo filter
parent
1a75d19a
Changes
28
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
524 additions
and
1459 deletions
+524
-1459
common_converter.go
plugin/filter/common_converter.go
+193
-27
dialect.go
plugin/filter/dialect.go
+23
-5
memo_service.proto
proto/api/v1/memo_service.proto
+4
-16
memo_service.pb.go
proto/gen/api/v1/memo_service.pb.go
+11
-24
memo_service.pb.gw.go
proto/gen/api/v1/memo_service.pb.gw.go
+0
-92
openapi.yaml
proto/gen/openapi.yaml
+0
-84
memo_service.go
server/router/api/v1/memo_service.go
+0
-7
shortcut_service.go
server/router/api/v1/shortcut_service.go
+17
-1
memo.go
store/db/mysql/memo.go
+2
-1
memo_filter.go
store/db/mysql/memo_filter.go
+0
-357
memo_filter_test.go
store/db/mysql/memo_filter_test.go
+2
-2
memo_relation.go
store/db/mysql/memo_relation.go
+2
-1
memo.go
store/db/postgres/memo.go
+2
-1
memo_filter.go
store/db/postgres/memo_filter.go
+0
-373
memo_filter_test.go
store/db/postgres/memo_filter_test.go
+2
-2
memo_relation.go
store/db/postgres/memo_relation.go
+2
-1
memo.go
store/db/sqlite/memo.go
+2
-1
memo_filter.go
store/db/sqlite/memo_filter.go
+0
-357
memo_filter_test.go
store/db/sqlite/memo_filter_test.go
+2
-2
memo_relation.go
store/db/sqlite/memo_relation.go
+2
-1
driver.go
store/driver.go
+0
-7
AddMemoRelationPopover.tsx
...onents/MemoEditor/ActionButton/AddMemoRelationPopover.tsx
+4
-2
PagedMemoList.tsx
web/src/components/PagedMemoList/PagedMemoList.tsx
+11
-2
Home.tsx
web/src/pages/Home.tsx
+2
-1
UserProfile.tsx
web/src/pages/UserProfile.tsx
+2
-1
common.ts
web/src/store/common.ts
+4
-0
memo_service.ts
web/src/types/proto/api/v1/memo_service.ts
+11
-90
descriptor.ts
web/src/types/proto/google/protobuf/descriptor.ts
+224
-1
No files found.
plugin/filter/common_converter.go
View file @
ed23cbc0
This diff is collapsed.
Click to expand it.
plugin/filter/dialect.go
View file @
ed23cbc0
...
...
@@ -85,7 +85,10 @@ func (*SQLiteDialect) GetBooleanValue(value bool) interface{} {
}
func
(
d
*
SQLiteDialect
)
GetBooleanComparison
(
path
string
,
value
bool
)
string
{
return
fmt
.
Sprintf
(
"%s = %d"
,
d
.
GetJSONExtract
(
path
),
d
.
GetBooleanValue
(
value
))
if
value
{
return
fmt
.
Sprintf
(
"%s = 1"
,
d
.
GetJSONExtract
(
path
))
}
return
fmt
.
Sprintf
(
"%s = 0"
,
d
.
GetJSONExtract
(
path
))
}
func
(
d
*
SQLiteDialect
)
GetBooleanCheck
(
path
string
)
string
{
...
...
@@ -132,11 +135,10 @@ func (*MySQLDialect) GetBooleanValue(value bool) interface{} {
}
func
(
d
*
MySQLDialect
)
GetBooleanComparison
(
path
string
,
value
bool
)
string
{
boolStr
:=
"false"
if
value
{
boolStr
=
"true"
return
fmt
.
Sprintf
(
"%s = CAST('true' AS JSON)"
,
d
.
GetJSONExtract
(
path
))
}
return
fmt
.
Sprintf
(
"%s
= CAST('%s' AS JSON)"
,
d
.
GetJSONExtract
(
path
),
boolStr
)
return
fmt
.
Sprintf
(
"%s
!= CAST('true' AS JSON)"
,
d
.
GetJSONExtract
(
path
)
)
}
func
(
d
*
MySQLDialect
)
GetBooleanCheck
(
path
string
)
string
{
...
...
@@ -163,7 +165,7 @@ func (*PostgreSQLDialect) GetParameterPlaceholder(index int) string {
}
func
(
d
*
PostgreSQLDialect
)
GetJSONExtract
(
path
string
)
string
{
// Convert $.property.hasTaskList to payload->'property'->>'hasTaskList'
// Convert $.property.hasTaskList to
memo.
payload->'property'->>'hasTaskList'
parts
:=
strings
.
Split
(
strings
.
TrimPrefix
(
path
,
"$."
),
"."
)
result
:=
fmt
.
Sprintf
(
"%s.payload"
,
d
.
GetTablePrefix
())
for
i
,
part
:=
range
parts
{
...
...
@@ -196,10 +198,26 @@ func (*PostgreSQLDialect) GetBooleanValue(value bool) interface{} {
}
func
(
d
*
PostgreSQLDialect
)
GetBooleanComparison
(
path
string
,
_
bool
)
string
{
// Note: The parameter placeholder will be replaced by the caller
return
fmt
.
Sprintf
(
"(%s)::boolean = ?"
,
d
.
GetJSONExtract
(
path
))
}
func
(
d
*
PostgreSQLDialect
)
GetBooleanCheck
(
path
string
)
string
{
// Special handling for standalone boolean identifiers
if
strings
.
Contains
(
path
,
"hasLink"
)
||
strings
.
Contains
(
path
,
"hasCode"
)
||
strings
.
Contains
(
path
,
"hasIncompleteTasks"
)
{
// Use memo-> instead of memo.payload-> for these fields
parts
:=
strings
.
Split
(
strings
.
TrimPrefix
(
path
,
"$."
),
"."
)
result
:=
fmt
.
Sprintf
(
"%s->'payload'"
,
d
.
GetTablePrefix
())
for
i
,
part
:=
range
parts
{
if
i
==
len
(
parts
)
-
1
{
result
+=
fmt
.
Sprintf
(
"->>'%s'"
,
part
)
}
else
{
result
+=
fmt
.
Sprintf
(
"->'%s'"
,
part
)
}
}
return
fmt
.
Sprintf
(
"(%s)::boolean = true"
,
result
)
}
// Use default format for other fields
return
fmt
.
Sprintf
(
"(%s)::boolean IS TRUE"
,
d
.
GetJSONExtract
(
path
))
}
...
...
proto/api/v1/memo_service.proto
View file @
ed23cbc0
...
...
@@ -26,12 +26,8 @@ service MemoService {
}
// ListMemos lists memos with pagination and filter.
rpc
ListMemos
(
ListMemosRequest
)
returns
(
ListMemosResponse
)
{
option
(
google.api.http
)
=
{
get
:
"/api/v1/memos"
additional_bindings
:
{
get
:
"/api/v1/{parent=users/*}/memos"
}
};
option
(
google.api.http
)
=
{
get
:
"/api/v1/memos"
};
option
(
google.api.method_signature
)
=
""
;
option
(
google.api.method_signature
)
=
"parent"
;
}
// GetMemo gets a memo.
rpc
GetMemo
(
GetMemoRequest
)
returns
(
Memo
)
{
...
...
@@ -276,27 +272,19 @@ message CreateMemoRequest {
}
message
ListMemosRequest
{
// Optional. The parent is the owner of the memos.
// If not specified or `users/-`, it will list all memos.
// Format: users/{user}
string
parent
=
1
[
(
google.api.field_behavior
)
=
OPTIONAL
,
(
google.api.resource_reference
)
=
{
type
:
"memos.api.v1/User"
}
];
// Optional. The maximum number of memos to return.
// The service may return fewer than this value.
// If unspecified, at most 50 memos will be returned.
// The maximum value is 1000; values above 1000 will be coerced to 1000.
int32
page_size
=
2
[(
google.api.field_behavior
)
=
OPTIONAL
];
int32
page_size
=
1
[(
google.api.field_behavior
)
=
OPTIONAL
];
// Optional. A page token, received from a previous `ListMemos` call.
// Provide this to retrieve the subsequent page.
string
page_token
=
3
[(
google.api.field_behavior
)
=
OPTIONAL
];
string
page_token
=
2
[(
google.api.field_behavior
)
=
OPTIONAL
];
// Optional. The state of the memos to list.
// Default to `NORMAL`. Set to `ARCHIVED` to list archived memos.
State
state
=
4
[(
google.api.field_behavior
)
=
OPTIONAL
];
State
state
=
3
[(
google.api.field_behavior
)
=
OPTIONAL
];
// Optional. The order to sort results by.
// Default to "display_time desc".
...
...
proto/gen/api/v1/memo_service.pb.go
View file @
ed23cbc0
...
...
@@ -551,21 +551,17 @@ func (x *CreateMemoRequest) GetRequestId() string {
type
ListMemosRequest
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
// Optional. The parent is the owner of the memos.
// If not specified or `users/-`, it will list all memos.
// Format: users/{user}
Parent
string
`protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
// Optional. The maximum number of memos to return.
// The service may return fewer than this value.
// If unspecified, at most 50 memos will be returned.
// The maximum value is 1000; values above 1000 will be coerced to 1000.
PageSize
int32
`protobuf:"varint,
2
,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
PageSize
int32
`protobuf:"varint,
1
,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
// Optional. A page token, received from a previous `ListMemos` call.
// Provide this to retrieve the subsequent page.
PageToken
string
`protobuf:"bytes,
3
,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
PageToken
string
`protobuf:"bytes,
2
,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
// Optional. The state of the memos to list.
// Default to `NORMAL`. Set to `ARCHIVED` to list archived memos.
State
State
`protobuf:"varint,
4
,opt,name=state,proto3,enum=memos.api.v1.State" json:"state,omitempty"`
State
State
`protobuf:"varint,
3
,opt,name=state,proto3,enum=memos.api.v1.State" json:"state,omitempty"`
// Optional. The order to sort results by.
// Default to "display_time desc".
// Example: "display_time desc" or "create_time asc"
...
...
@@ -610,13 +606,6 @@ func (*ListMemosRequest) Descriptor() ([]byte, []int) {
return
file_api_v1_memo_service_proto_rawDescGZIP
(),
[]
int
{
4
}
}
func
(
x
*
ListMemosRequest
)
GetParent
()
string
{
if
x
!=
nil
{
return
x
.
Parent
}
return
""
}
func
(
x
*
ListMemosRequest
)
GetPageSize
()
int32
{
if
x
!=
nil
{
return
x
.
PageSize
...
...
@@ -2064,14 +2053,12 @@ const file_api_v1_memo_service_proto_rawDesc = "" +
"
\a
memo_id
\x18\x02
\x01
(
\t
B
\x03\xe0
A
\x01
R
\x06
memoId
\x12
(
\n
"
+
"
\r
validate_only
\x18\x03
\x01
(
\b
B
\x03\xe0
A
\x01
R
\f
validateOnly
\x12\"\n
"
+
"
\n
"
+
"request_id
\x18\x04
\x01
(
\t
B
\x03\xe0
A
\x01
R
\t
requestId
\"\xa0\x02\n
"
+
"
\x10
ListMemosRequest
\x12
1
\n
"
+
"
\x06
parent
\x18\x01
\x01
(
\t
B
\x19\xe0
A
\x01\xfa
A
\x13\n
"
+
"
\x11
memos.api.v1/UserR
\x06
parent
\x12
\n
"
+
"
\t
page_size
\x18\x02
\x01
(
\x05
B
\x03\xe0
A
\x01
R
\b
pageSize
\x12\"\n
"
+
"request_id
\x18\x04
\x01
(
\t
B
\x03\xe0
A
\x01
R
\t
requestId
\"\xed\x01\n
"
+
"
\x10
ListMemosRequest
\x12
\n
"
+
"
\t
page_size
\x18\x01
\x01
(
\x05
B
\x03\xe0
A
\x01
R
\b
pageSize
\x12\"\n
"
+
"
\n
"
+
"page_token
\x18\x0
3
\x01
(
\t
B
\x03\xe0
A
\x01
R
\t
pageToken
\x12
.
\n
"
+
"
\x05
state
\x18\x0
4
\x01
(
\x0e
2
\x13
.memos.api.v1.StateB
\x03\xe0
A
\x01
R
\x05
state
\x12\x1e\n
"
+
"page_token
\x18\x0
2
\x01
(
\t
B
\x03\xe0
A
\x01
R
\t
pageToken
\x12
.
\n
"
+
"
\x05
state
\x18\x0
3
\x01
(
\x0e
2
\x13
.memos.api.v1.StateB
\x03\xe0
A
\x01
R
\x05
state
\x12\x1e\n
"
+
"
\b
order_by
\x18\x05
\x01
(
\t
B
\x03\xe0
A
\x01
R
\a
orderBy
\x12\x1b\n
"
+
"
\x06
filter
\x18\x06
\x01
(
\t
B
\x03\xe0
A
\x01
R
\x06
filter
\x12
&
\n
"
+
"
\f
show_deleted
\x18\a
\x01
(
\b
B
\x03\xe0
A
\x01
R
\v
showDeleted
\"\x84\x01\n
"
+
...
...
@@ -2187,11 +2174,11 @@ const file_api_v1_memo_service_proto_rawDesc = "" +
"
\a
PRIVATE
\x10\x01\x12\r\n
"
+
"
\t
PROTECTED
\x10\x02\x12\n
"
+
"
\n
"
+
"
\x06
PUBLIC
\x10\x03
2
\x
97\x11
\n
"
+
"
\x06
PUBLIC
\x10\x03
2
\x
eb\x10
\n
"
+
"
\v
MemoService
\x12
e
\n
"
+
"
\n
"
+
"CreateMemo
\x12\x1f
.memos.api.v1.CreateMemoRequest
\x1a\x12
.memos.api.v1.Memo
\"\"\xda
A
\x04
memo
\x82\xd3\xe4\x93\x02\x15
:
\x04
memo
\"\r
/api/v1/memos
\x12
\x91\x01
\n
"
+
"
\t
ListMemos
\x12\x1e
.memos.api.v1.ListMemosRequest
\x1a\x1f
.memos.api.v1.ListMemosResponse
\"
C
\xda
A
\x00\xda
A
\x06
parent
\x82\xd3\xe4\x93\x02
1Z
\x12\x1e
/api/v1/{parent=users/*}/memos
\x12\r
/api/v1/memos
\x12
b
\n
"
+
"CreateMemo
\x12\x1f
.memos.api.v1.CreateMemoRequest
\x1a\x12
.memos.api.v1.Memo
\"\"\xda
A
\x04
memo
\x82\xd3\xe4\x93\x02\x15
:
\x04
memo
\"\r
/api/v1/memos
\x12
f
\n
"
+
"
\t
ListMemos
\x12\x1e
.memos.api.v1.ListMemosRequest
\x1a\x1f
.memos.api.v1.ListMemosResponse
\"
\x18\xda
A
\x00\x82\xd3\xe4\x93\x02\x0f
\x12\r
/api/v1/memos
\x12
b
\n
"
+
"
\a
GetMemo
\x12\x1c
.memos.api.v1.GetMemoRequest
\x1a\x12
.memos.api.v1.Memo
\"
%
\xda
A
\x04
name
\x82\xd3\xe4\x93\x02\x18\x12\x16
/api/v1/{name=memos/*}
\x12\x7f\n
"
+
"
\n
"
+
"UpdateMemo
\x12\x1f
.memos.api.v1.UpdateMemoRequest
\x1a\x12
.memos.api.v1.Memo
\"
<
\xda
A
\x10
memo,update_mask
\x82\xd3\xe4\x93\x02
#:
\x04
memo2
\x1b
/api/v1/{memo.name=memos/*}
\x12
l
\n
"
+
...
...
proto/gen/api/v1/memo_service.pb.gw.go
View file @
ed23cbc0
...
...
@@ -111,59 +111,6 @@ func local_request_MemoService_ListMemos_0(ctx context.Context, marshaler runtim
return
msg
,
metadata
,
err
}
var
filter_MemoService_ListMemos_1
=
&
utilities
.
DoubleArray
{
Encoding
:
map
[
string
]
int
{
"parent"
:
0
},
Base
:
[]
int
{
1
,
1
,
0
},
Check
:
[]
int
{
0
,
1
,
2
}}
func
request_MemoService_ListMemos_1
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
MemoServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
(
protoReq
ListMemosRequest
metadata
runtime
.
ServerMetadata
err
error
)
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
)
}
if
err
:=
req
.
ParseForm
();
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
if
err
:=
runtime
.
PopulateQueryParameters
(
&
protoReq
,
req
.
Form
,
filter_MemoService_ListMemos_1
);
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
msg
,
err
:=
client
.
ListMemos
(
ctx
,
&
protoReq
,
grpc
.
Header
(
&
metadata
.
HeaderMD
),
grpc
.
Trailer
(
&
metadata
.
TrailerMD
))
return
msg
,
metadata
,
err
}
func
local_request_MemoService_ListMemos_1
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
server
MemoServiceServer
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
(
protoReq
ListMemosRequest
metadata
runtime
.
ServerMetadata
err
error
)
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
)
}
if
err
:=
req
.
ParseForm
();
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
if
err
:=
runtime
.
PopulateQueryParameters
(
&
protoReq
,
req
.
Form
,
filter_MemoService_ListMemos_1
);
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
msg
,
err
:=
server
.
ListMemos
(
ctx
,
&
protoReq
)
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
)
{
...
...
@@ -956,26 +903,6 @@ func RegisterMemoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
}
forward_MemoService_ListMemos_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_MemoService_ListMemos_1
,
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/ListMemos"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{parent=users/*}/memos"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
local_request_MemoService_ListMemos_1
(
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_ListMemos_1
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_MemoService_GetMemo_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
...
...
@@ -1330,23 +1257,6 @@ func RegisterMemoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
}
forward_MemoService_ListMemos_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_MemoService_ListMemos_1
,
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/ListMemos"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{parent=users/*}/memos"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
request_MemoService_ListMemos_1
(
annotatedContext
,
inboundMarshaler
,
client
,
req
,
pathParams
)
annotatedContext
=
runtime
.
NewServerMetadataContext
(
annotatedContext
,
md
)
if
err
!=
nil
{
runtime
.
HTTPError
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
forward_MemoService_ListMemos_1
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_MemoService_GetMemo_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
...
...
@@ -1591,7 +1501,6 @@ func RegisterMemoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
var
(
pattern_MemoService_CreateMemo_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v1"
,
"memos"
},
""
))
pattern_MemoService_ListMemos_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v1"
,
"memos"
},
""
))
pattern_MemoService_ListMemos_1
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
,
2
,
4
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"parent"
,
"memos"
},
""
))
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"
},
""
))
...
...
@@ -1611,7 +1520,6 @@ var (
var
(
forward_MemoService_CreateMemo_0
=
runtime
.
ForwardResponseMessage
forward_MemoService_ListMemos_0
=
runtime
.
ForwardResponseMessage
forward_MemoService_ListMemos_1
=
runtime
.
ForwardResponseMessage
forward_MemoService_GetMemo_0
=
runtime
.
ForwardResponseMessage
forward_MemoService_UpdateMemo_0
=
runtime
.
ForwardResponseMessage
forward_MemoService_DeleteMemo_0
=
runtime
.
ForwardResponseMessage
...
...
proto/gen/openapi.yaml
View file @
ed23cbc0
...
...
@@ -622,14 +622,6 @@ paths:
description
:
ListMemos lists memos with pagination and filter.
operationId
:
MemoService_ListMemos
parameters
:
-
name
:
parent
in
:
query
description
:
|-
Optional. The parent is the owner of the memos.
If not specified or `users/-`, it will list all memos.
Format: users/{user}
schema:
type: string
-
name
:
pageSize
in
:
query
description
:
|-
...
...
@@ -1597,82 +1589,6 @@ paths:
application/json
:
schema
:
$ref
:
'
#/components/schemas/Status'
/api/v1/users/{user}/memos
:
get
:
tags
:
-
MemoService
description
:
ListMemos lists memos with pagination and filter.
operationId
:
MemoService_ListMemos
parameters
:
-
name
:
user
in
:
path
description
:
The user id.
required
:
true
schema
:
type
:
string
-
name
:
pageSize
in
:
query
description
:
|-
Optional. The maximum number of memos to return.
The service may return fewer than this value.
If unspecified, at most 50 memos will be returned.
The maximum value is 1000; values above 1000 will be coerced to 1000.
schema:
type: integer
format: int32
-
name
:
pageToken
in
:
query
description
:
|-
Optional. A page token, received from a previous `ListMemos` call.
Provide this to retrieve the subsequent page.
schema:
type: string
-
name
:
state
in
:
query
description
:
|-
Optional. The state of the memos to list.
Default to `NORMAL`. Set to `ARCHIVED` to list archived memos.
schema:
enum:
- STATE_UNSPECIFIED
- NORMAL
- ARCHIVED
type: string
format: enum
-
name
:
orderBy
in
:
query
description
:
|-
Optional. The order to sort results by.
Default to "display_time desc".
Example: "display_time desc" or "create_time asc"
schema:
type: string
-
name
:
filter
in
:
query
description
:
|-
Optional. Filter to apply to the list results.
Filter is a CEL expression to filter memos.
Refer to `Shortcut.filter`.
schema:
type: string
-
name
:
showDeleted
in
:
query
description
:
Optional. If
true
, show deleted memos in the response.
schema
:
type
:
boolean
responses
:
"
200"
:
description
:
OK
content
:
application/json
:
schema
:
$ref
:
'
#/components/schemas/ListMemosResponse'
default
:
description
:
Default error response
content
:
application/json
:
schema
:
$ref
:
'
#/components/schemas/Status'
/api/v1/users/{user}/sessions
:
get
:
tags
:
...
...
server/router/api/v1/memo_service.go
View file @
ed23cbc0
...
...
@@ -99,13 +99,6 @@ func (s *APIV1Service) ListMemos(ctx context.Context, request *v1pb.ListMemosReq
// Exclude comments by default.
ExcludeComments
:
true
,
}
if
request
.
Parent
!=
""
&&
request
.
Parent
!=
"users/-"
{
userID
,
err
:=
ExtractUserIDFromName
(
request
.
Parent
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid parent: %v"
,
err
)
}
memoFind
.
CreatorID
=
&
userID
}
if
request
.
State
==
v1pb
.
State_ARCHIVED
{
state
:=
store
.
Archived
memoFind
.
RowStatus
=
&
state
...
...
server/router/api/v1/shortcut_service.go
View file @
ed23cbc0
...
...
@@ -329,7 +329,23 @@ func (s *APIV1Service) validateFilter(_ context.Context, filterStr string) error
return
errors
.
Wrap
(
err
,
"failed to parse filter"
)
}
convertCtx
:=
filter
.
NewConvertContext
()
err
=
s
.
Store
.
GetDriver
()
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
())
// Determine the dialect based on the actual database driver
var
dialect
filter
.
SQLDialect
switch
s
.
Profile
.
Driver
{
case
"sqlite"
:
dialect
=
&
filter
.
SQLiteDialect
{}
case
"mysql"
:
dialect
=
&
filter
.
MySQLDialect
{}
case
"postgres"
:
dialect
=
&
filter
.
PostgreSQLDialect
{}
default
:
// Default to SQLite for unknown drivers
dialect
=
&
filter
.
SQLiteDialect
{}
}
converter
:=
filter
.
NewCommonSQLConverter
(
dialect
)
err
=
converter
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
())
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to convert filter to SQL"
)
}
...
...
store/db/mysql/memo.go
View file @
ed23cbc0
...
...
@@ -59,7 +59,8 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo
}
convertCtx
:=
filter
.
NewConvertContext
()
// ConvertExprToSQL converts the parsed expression to a SQL condition string.
if
err
:=
d
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
converter
:=
filter
.
NewCommonSQLConverter
(
&
filter
.
MySQLDialect
{})
if
err
:=
converter
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
return
nil
,
err
}
condition
:=
convertCtx
.
Buffer
.
String
()
...
...
store/db/mysql/memo_filter.go
deleted
100644 → 0
View file @
1a75d19a
This diff is collapsed.
Click to expand it.
store/db/mysql/memo_filter_test.go
View file @
ed23cbc0
...
...
@@ -148,11 +148,11 @@ func TestConvertExprToSQL(t *testing.T) {
}
for
_
,
tt
:=
range
tests
{
db
:=
&
DB
{}
parsedExpr
,
err
:=
filter
.
Parse
(
tt
.
filter
,
filter
.
MemoFilterCELAttributes
...
)
require
.
NoError
(
t
,
err
)
convertCtx
:=
filter
.
NewConvertContext
()
err
=
db
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
())
converter
:=
filter
.
NewCommonSQLConverter
(
&
filter
.
MySQLDialect
{})
err
=
converter
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
())
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
tt
.
want
,
convertCtx
.
Buffer
.
String
())
require
.
Equal
(
t
,
tt
.
args
,
convertCtx
.
Args
)
...
...
store/db/mysql/memo_relation.go
View file @
ed23cbc0
...
...
@@ -51,7 +51,8 @@ func (d *DB) ListMemoRelations(ctx context.Context, find *store.FindMemoRelation
}
convertCtx
:=
filter
.
NewConvertContext
()
// ConvertExprToSQL converts the parsed expression to a SQL condition string.
if
err
:=
d
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
converter
:=
filter
.
NewCommonSQLConverter
(
&
filter
.
MySQLDialect
{})
if
err
:=
converter
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
return
nil
,
err
}
condition
:=
convertCtx
.
Buffer
.
String
()
...
...
store/db/postgres/memo.go
View file @
ed23cbc0
...
...
@@ -51,7 +51,8 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo
convertCtx
:=
filter
.
NewConvertContext
()
convertCtx
.
ArgsOffset
=
len
(
args
)
// ConvertExprToSQL converts the parsed expression to a SQL condition string.
if
err
:=
d
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
converter
:=
filter
.
NewCommonSQLConverterWithOffset
(
&
filter
.
PostgreSQLDialect
{},
convertCtx
.
ArgsOffset
+
len
(
convertCtx
.
Args
))
if
err
:=
converter
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
return
nil
,
err
}
condition
:=
convertCtx
.
Buffer
.
String
()
...
...
store/db/postgres/memo_filter.go
deleted
100644 → 0
View file @
1a75d19a
This diff is collapsed.
Click to expand it.
store/db/postgres/memo_filter_test.go
View file @
ed23cbc0
...
...
@@ -148,11 +148,11 @@ func TestConvertExprToSQL(t *testing.T) {
}
for
_
,
tt
:=
range
tests
{
db
:=
&
DB
{}
parsedExpr
,
err
:=
filter
.
Parse
(
tt
.
filter
,
filter
.
MemoFilterCELAttributes
...
)
require
.
NoError
(
t
,
err
)
convertCtx
:=
filter
.
NewConvertContext
()
err
=
db
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
())
converter
:=
filter
.
NewCommonSQLConverterWithOffset
(
&
filter
.
PostgreSQLDialect
{},
convertCtx
.
ArgsOffset
+
len
(
convertCtx
.
Args
))
err
=
converter
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
())
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
tt
.
want
,
convertCtx
.
Buffer
.
String
())
require
.
Equal
(
t
,
tt
.
args
,
convertCtx
.
Args
)
...
...
store/db/postgres/memo_relation.go
View file @
ed23cbc0
...
...
@@ -58,7 +58,8 @@ func (d *DB) ListMemoRelations(ctx context.Context, find *store.FindMemoRelation
convertCtx
:=
filter
.
NewConvertContext
()
convertCtx
.
ArgsOffset
=
len
(
args
)
// ConvertExprToSQL converts the parsed expression to a SQL condition string.
if
err
:=
d
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
converter
:=
filter
.
NewCommonSQLConverterWithOffset
(
&
filter
.
PostgreSQLDialect
{},
convertCtx
.
ArgsOffset
+
len
(
convertCtx
.
Args
))
if
err
:=
converter
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
return
nil
,
err
}
condition
:=
convertCtx
.
Buffer
.
String
()
...
...
store/db/sqlite/memo.go
View file @
ed23cbc0
...
...
@@ -51,7 +51,8 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo
}
convertCtx
:=
filter
.
NewConvertContext
()
// ConvertExprToSQL converts the parsed expression to a SQL condition string.
if
err
:=
d
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
converter
:=
filter
.
NewCommonSQLConverter
(
&
filter
.
SQLiteDialect
{})
if
err
:=
converter
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
return
nil
,
err
}
condition
:=
convertCtx
.
Buffer
.
String
()
...
...
store/db/sqlite/memo_filter.go
deleted
100644 → 0
View file @
1a75d19a
This diff is collapsed.
Click to expand it.
store/db/sqlite/memo_filter_test.go
View file @
ed23cbc0
...
...
@@ -153,11 +153,11 @@ func TestConvertExprToSQL(t *testing.T) {
}
for
_
,
tt
:=
range
tests
{
db
:=
&
DB
{}
parsedExpr
,
err
:=
filter
.
Parse
(
tt
.
filter
,
filter
.
MemoFilterCELAttributes
...
)
require
.
NoError
(
t
,
err
)
convertCtx
:=
filter
.
NewConvertContext
()
err
=
db
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
())
converter
:=
filter
.
NewCommonSQLConverter
(
&
filter
.
SQLiteDialect
{})
err
=
converter
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
())
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
tt
.
want
,
convertCtx
.
Buffer
.
String
())
require
.
Equal
(
t
,
tt
.
args
,
convertCtx
.
Args
)
...
...
store/db/sqlite/memo_relation.go
View file @
ed23cbc0
...
...
@@ -57,7 +57,8 @@ func (d *DB) ListMemoRelations(ctx context.Context, find *store.FindMemoRelation
}
convertCtx
:=
filter
.
NewConvertContext
()
// ConvertExprToSQL converts the parsed expression to a SQL condition string.
if
err
:=
d
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
converter
:=
filter
.
NewCommonSQLConverter
(
&
filter
.
SQLiteDialect
{})
if
err
:=
converter
.
ConvertExprToSQL
(
convertCtx
,
parsedExpr
.
GetExpr
());
err
!=
nil
{
return
nil
,
err
}
condition
:=
convertCtx
.
Buffer
.
String
()
...
...
store/driver.go
View file @
ed23cbc0
...
...
@@ -3,10 +3,6 @@ package store
import
(
"context"
"database/sql"
exprv1
"google.golang.org/genproto/googleapis/api/expr/v1alpha1"
"github.com/usememos/memos/plugin/filter"
)
// Driver is an interface for store driver.
...
...
@@ -73,7 +69,4 @@ type Driver interface {
UpsertReaction
(
ctx
context
.
Context
,
create
*
Reaction
)
(
*
Reaction
,
error
)
ListReactions
(
ctx
context
.
Context
,
find
*
FindReaction
)
([]
*
Reaction
,
error
)
DeleteReaction
(
ctx
context
.
Context
,
delete
*
DeleteReaction
)
error
// Shortcut related methods.
ConvertExprToSQL
(
ctx
*
filter
.
ConvertContext
,
expr
*
exprv1
.
Expr
)
error
}
web/src/components/MemoEditor/ActionButton/AddMemoRelationPopover.tsx
View file @
ed23cbc0
...
...
@@ -47,12 +47,14 @@ const AddMemoRelationPopover = (props: Props) => {
setIsFetching
(
true
);
try
{
const
conditions
=
[];
// Extract user ID from user name (format: users/{user_id})
const
userId
=
user
.
name
.
replace
(
"users/"
,
""
);
conditions
.
push
(
`creator_id ==
${
userId
}
`
);
if
(
searchText
)
{
conditions
.
push
(
`content.contains("
${
searchText
}
")`
);
}
const
{
memos
}
=
await
memoServiceClient
.
listMemos
({
parent
:
user
.
name
,
filter
:
conditions
.
length
>
0
?
conditions
.
join
(
" && "
)
:
undefined
,
filter
:
conditions
.
join
(
" && "
),
pageSize
:
DEFAULT_LIST_MEMOS_PAGE_SIZE
,
});
setFetchedMemos
(
memos
);
...
...
web/src/components/PagedMemoList/PagedMemoList.tsx
View file @
ed23cbc0
...
...
@@ -47,11 +47,20 @@ const PagedMemoList = observer((props: Props) => {
setIsRequesting
(
true
);
try
{
const
filters
=
[];
if
(
props
.
owner
)
{
// Extract user ID from owner name (format: users/{user_id})
const
userId
=
props
.
owner
.
replace
(
"users/"
,
""
);
filters
.
push
(
`creator_id ==
${
userId
}
`
);
}
if
(
props
.
filter
)
{
filters
.
push
(
props
.
filter
);
}
const
response
=
await
memoStore
.
fetchMemos
({
parent
:
props
.
owner
||
""
,
state
:
props
.
state
||
State
.
NORMAL
,
orderBy
:
props
.
orderBy
||
"display_time desc"
,
filter
:
props
.
filter
||
""
,
filter
:
filters
.
length
>
0
?
filters
.
join
(
" && "
)
:
undefined
,
pageSize
:
props
.
pageSize
||
DEFAULT_LIST_MEMOS_PAGE_SIZE
,
pageToken
,
});
...
...
web/src/pages/Home.tsx
View file @
ed23cbc0
...
...
@@ -5,6 +5,7 @@ import MemoView from "@/components/MemoView";
import
PagedMemoList
from
"@/components/PagedMemoList"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
{
viewStore
,
userStore
,
workspaceStore
}
from
"@/store"
;
import
{
extractUserIdFromName
}
from
"@/store/common"
;
import
memoFilterStore
from
"@/store/memoFilter"
;
import
{
State
}
from
"@/types/proto/api/v1/common"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
...
...
@@ -22,7 +23,7 @@ const Home = observer(() => {
const
selectedShortcut
=
userStore
.
state
.
shortcuts
.
find
((
shortcut
)
=>
getShortcutId
(
shortcut
.
name
)
===
memoFilterStore
.
shortcut
);
const
memoFilter
=
useMemo
(()
=>
{
const
conditions
=
[];
const
conditions
=
[
`creator_id == "
${
extractUserIdFromName
(
user
.
name
)}
"`
];
if
(
selectedShortcut
?.
filter
)
{
conditions
.
push
(
selectedShortcut
.
filter
);
}
...
...
web/src/pages/UserProfile.tsx
View file @
ed23cbc0
...
...
@@ -11,6 +11,7 @@ import UserAvatar from "@/components/UserAvatar";
import
{
Button
}
from
"@/components/ui/button"
;
import
useLoading
from
"@/hooks/useLoading"
;
import
{
viewStore
,
userStore
}
from
"@/store"
;
import
{
extractUserIdFromName
}
from
"@/store/common"
;
import
memoFilterStore
from
"@/store/memoFilter"
;
import
{
State
}
from
"@/types/proto/api/v1/common"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
...
...
@@ -46,7 +47,7 @@ const UserProfile = observer(() => {
return
undefined
;
}
const
conditions
=
[];
const
conditions
=
[
`creator_id == "
${
extractUserIdFromName
(
user
.
name
)}
"`
];
for
(
const
filter
of
memoFilterStore
.
filters
)
{
if
(
filter
.
factor
===
"contentSearch"
)
{
conditions
.
push
(
`content.contains("
${
filter
.
value
}
")`
);
...
...
web/src/store/common.ts
View file @
ed23cbc0
...
...
@@ -4,6 +4,10 @@ export const memoNamePrefix = "memos/";
export
const
identityProviderNamePrefix
=
"identityProviders/"
;
export
const
activityNamePrefix
=
"activities/"
;
export
const
extractUserIdFromName
=
(
name
:
string
)
=>
{
return
name
.
split
(
userNamePrefix
).
pop
()
||
""
;
};
export
const
extractMemoIdFromName
=
(
name
:
string
)
=>
{
return
name
.
split
(
memoNamePrefix
).
pop
()
||
""
;
};
...
...
web/src/types/proto/api/v1/memo_service.ts
View file @
ed23cbc0
...
...
@@ -175,12 +175,6 @@ export interface CreateMemoRequest {
}
export
interface
ListMemosRequest
{
/**
* Optional. The parent is the owner of the memos.
* If not specified or `users/-`, it will list all memos.
* Format: users/{user}
*/
parent
:
string
;
/**
* Optional. The maximum number of memos to return.
* The service may return fewer than this value.
...
...
@@ -1090,30 +1084,19 @@ export const CreateMemoRequest: MessageFns<CreateMemoRequest> = {
};
function
createBaseListMemosRequest
():
ListMemosRequest
{
return
{
parent
:
""
,
pageSize
:
0
,
pageToken
:
""
,
state
:
State
.
STATE_UNSPECIFIED
,
orderBy
:
""
,
filter
:
""
,
showDeleted
:
false
,
};
return
{
pageSize
:
0
,
pageToken
:
""
,
state
:
State
.
STATE_UNSPECIFIED
,
orderBy
:
""
,
filter
:
""
,
showDeleted
:
false
};
}
export
const
ListMemosRequest
:
MessageFns
<
ListMemosRequest
>
=
{
encode
(
message
:
ListMemosRequest
,
writer
:
BinaryWriter
=
new
BinaryWriter
()):
BinaryWriter
{
if
(
message
.
parent
!==
""
)
{
writer
.
uint32
(
10
).
string
(
message
.
parent
);
}
if
(
message
.
pageSize
!==
0
)
{
writer
.
uint32
(
16
).
int32
(
message
.
pageSize
);
writer
.
uint32
(
8
).
int32
(
message
.
pageSize
);
}
if
(
message
.
pageToken
!==
""
)
{
writer
.
uint32
(
26
).
string
(
message
.
pageToken
);
writer
.
uint32
(
18
).
string
(
message
.
pageToken
);
}
if
(
message
.
state
!==
State
.
STATE_UNSPECIFIED
)
{
writer
.
uint32
(
32
).
int32
(
stateToNumber
(
message
.
state
));
writer
.
uint32
(
24
).
int32
(
stateToNumber
(
message
.
state
));
}
if
(
message
.
orderBy
!==
""
)
{
writer
.
uint32
(
42
).
string
(
message
.
orderBy
);
...
...
@@ -1135,31 +1118,23 @@ export const ListMemosRequest: MessageFns<ListMemosRequest> = {
const
tag
=
reader
.
uint32
();
switch
(
tag
>>>
3
)
{
case
1
:
{
if
(
tag
!==
10
)
{
break
;
}
message
.
parent
=
reader
.
string
();
continue
;
}
case
2
:
{
if
(
tag
!==
16
)
{
if
(
tag
!==
8
)
{
break
;
}
message
.
pageSize
=
reader
.
int32
();
continue
;
}
case
3
:
{
if
(
tag
!==
26
)
{
case
2
:
{
if
(
tag
!==
18
)
{
break
;
}
message
.
pageToken
=
reader
.
string
();
continue
;
}
case
4
:
{
if
(
tag
!==
32
)
{
case
3
:
{
if
(
tag
!==
24
)
{
break
;
}
...
...
@@ -1204,7 +1179,6 @@ export const ListMemosRequest: MessageFns<ListMemosRequest> = {
},
fromPartial
(
object
:
DeepPartial
<
ListMemosRequest
>
):
ListMemosRequest
{
const
message
=
createBaseListMemosRequest
();
message
.
parent
=
object
.
parent
??
""
;
message
.
pageSize
=
object
.
pageSize
??
0
;
message
.
pageToken
=
object
.
pageToken
??
""
;
message
.
state
=
object
.
state
??
State
.
STATE_UNSPECIFIED
;
...
...
@@ -2662,61 +2636,8 @@ export const MemoServiceDefinition = {
responseStream
:
false
,
options
:
{
_unknownFields
:
{
8410
:
[
new
Uint8Array
([
0
]),
new
Uint8Array
([
6
,
112
,
97
,
114
,
101
,
110
,
116
])],
578365826
:
[
new
Uint8Array
([
49
,
90
,
32
,
18
,
30
,
47
,
97
,
112
,
105
,
47
,
118
,
49
,
47
,
123
,
112
,
97
,
114
,
101
,
110
,
116
,
61
,
117
,
115
,
101
,
114
,
115
,
47
,
42
,
125
,
47
,
109
,
101
,
109
,
111
,
115
,
18
,
13
,
47
,
97
,
112
,
105
,
47
,
118
,
49
,
47
,
109
,
101
,
109
,
111
,
115
,
]),
],
8410
:
[
new
Uint8Array
([
0
])],
578365826
:
[
new
Uint8Array
([
15
,
18
,
13
,
47
,
97
,
112
,
105
,
47
,
118
,
49
,
47
,
109
,
101
,
109
,
111
,
115
])],
},
},
},
...
...
web/src/types/proto/google/protobuf/descriptor.ts
View file @
ed23cbc0
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment