Commit ed23cbc0 authored by johnnyjoy's avatar johnnyjoy

refactor: memo filter

parent 1a75d19a
This diff is collapsed.
...@@ -85,7 +85,10 @@ func (*SQLiteDialect) GetBooleanValue(value bool) interface{} { ...@@ -85,7 +85,10 @@ func (*SQLiteDialect) GetBooleanValue(value bool) interface{} {
} }
func (d *SQLiteDialect) GetBooleanComparison(path string, value bool) string { 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 { func (d *SQLiteDialect) GetBooleanCheck(path string) string {
...@@ -132,11 +135,10 @@ func (*MySQLDialect) GetBooleanValue(value bool) interface{} { ...@@ -132,11 +135,10 @@ func (*MySQLDialect) GetBooleanValue(value bool) interface{} {
} }
func (d *MySQLDialect) GetBooleanComparison(path string, value bool) string { func (d *MySQLDialect) GetBooleanComparison(path string, value bool) string {
boolStr := "false"
if value { 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 { func (d *MySQLDialect) GetBooleanCheck(path string) string {
...@@ -163,7 +165,7 @@ func (*PostgreSQLDialect) GetParameterPlaceholder(index int) string { ...@@ -163,7 +165,7 @@ func (*PostgreSQLDialect) GetParameterPlaceholder(index int) string {
} }
func (d *PostgreSQLDialect) GetJSONExtract(path string) 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, "$."), ".") parts := strings.Split(strings.TrimPrefix(path, "$."), ".")
result := fmt.Sprintf("%s.payload", d.GetTablePrefix()) result := fmt.Sprintf("%s.payload", d.GetTablePrefix())
for i, part := range parts { for i, part := range parts {
...@@ -196,10 +198,26 @@ func (*PostgreSQLDialect) GetBooleanValue(value bool) interface{} { ...@@ -196,10 +198,26 @@ func (*PostgreSQLDialect) GetBooleanValue(value bool) interface{} {
} }
func (d *PostgreSQLDialect) GetBooleanComparison(path string, _ bool) string { 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)) return fmt.Sprintf("(%s)::boolean = ?", d.GetJSONExtract(path))
} }
func (d *PostgreSQLDialect) GetBooleanCheck(path string) string { 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)) return fmt.Sprintf("(%s)::boolean IS TRUE", d.GetJSONExtract(path))
} }
......
...@@ -26,12 +26,8 @@ service MemoService { ...@@ -26,12 +26,8 @@ service MemoService {
} }
// ListMemos lists memos with pagination and filter. // ListMemos lists memos with pagination and filter.
rpc ListMemos(ListMemosRequest) returns (ListMemosResponse) { rpc ListMemos(ListMemosRequest) returns (ListMemosResponse) {
option (google.api.http) = { option (google.api.http) = {get: "/api/v1/memos"};
get: "/api/v1/memos"
additional_bindings: {get: "/api/v1/{parent=users/*}/memos"}
};
option (google.api.method_signature) = ""; option (google.api.method_signature) = "";
option (google.api.method_signature) = "parent";
} }
// GetMemo gets a memo. // GetMemo gets a memo.
rpc GetMemo(GetMemoRequest) returns (Memo) { rpc GetMemo(GetMemoRequest) returns (Memo) {
...@@ -276,27 +272,19 @@ message CreateMemoRequest { ...@@ -276,27 +272,19 @@ message CreateMemoRequest {
} }
message ListMemosRequest { 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. // Optional. The maximum number of memos to return.
// The service may return fewer than this value. // The service may return fewer than this value.
// If unspecified, at most 50 memos will be returned. // If unspecified, at most 50 memos will be returned.
// The maximum value is 1000; values above 1000 will be coerced to 1000. // 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. // Optional. A page token, received from a previous `ListMemos` call.
// Provide this to retrieve the subsequent page. // 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. // Optional. The state of the memos to list.
// Default to `NORMAL`. Set to `ARCHIVED` to list archived memos. // 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. // Optional. The order to sort results by.
// Default to "display_time desc". // Default to "display_time desc".
......
...@@ -551,21 +551,17 @@ func (x *CreateMemoRequest) GetRequestId() string { ...@@ -551,21 +551,17 @@ func (x *CreateMemoRequest) GetRequestId() string {
type ListMemosRequest struct { type ListMemosRequest struct {
state protoimpl.MessageState `protogen:"open.v1"` 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. // Optional. The maximum number of memos to return.
// The service may return fewer than this value. // The service may return fewer than this value.
// If unspecified, at most 50 memos will be returned. // If unspecified, at most 50 memos will be returned.
// The maximum value is 1000; values above 1000 will be coerced to 1000. // 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. // Optional. A page token, received from a previous `ListMemos` call.
// Provide this to retrieve the subsequent page. // 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. // Optional. The state of the memos to list.
// Default to `NORMAL`. Set to `ARCHIVED` to list archived memos. // 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. // Optional. The order to sort results by.
// Default to "display_time desc". // Default to "display_time desc".
// Example: "display_time desc" or "create_time asc" // Example: "display_time desc" or "create_time asc"
...@@ -610,13 +606,6 @@ func (*ListMemosRequest) Descriptor() ([]byte, []int) { ...@@ -610,13 +606,6 @@ func (*ListMemosRequest) Descriptor() ([]byte, []int) {
return file_api_v1_memo_service_proto_rawDescGZIP(), []int{4} 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 { func (x *ListMemosRequest) GetPageSize() int32 {
if x != nil { if x != nil {
return x.PageSize return x.PageSize
...@@ -2064,14 +2053,12 @@ const file_api_v1_memo_service_proto_rawDesc = "" + ...@@ -2064,14 +2053,12 @@ const file_api_v1_memo_service_proto_rawDesc = "" +
"\amemo_id\x18\x02 \x01(\tB\x03\xe0A\x01R\x06memoId\x12(\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" + "\rvalidate_only\x18\x03 \x01(\bB\x03\xe0A\x01R\fvalidateOnly\x12\"\n" +
"\n" + "\n" +
"request_id\x18\x04 \x01(\tB\x03\xe0A\x01R\trequestId\"\xa0\x02\n" + "request_id\x18\x04 \x01(\tB\x03\xe0A\x01R\trequestId\"\xed\x01\n" +
"\x10ListMemosRequest\x121\n" + "\x10ListMemosRequest\x12 \n" +
"\x06parent\x18\x01 \x01(\tB\x19\xe0A\x01\xfaA\x13\n" + "\tpage_size\x18\x01 \x01(\x05B\x03\xe0A\x01R\bpageSize\x12\"\n" +
"\x11memos.api.v1/UserR\x06parent\x12 \n" +
"\tpage_size\x18\x02 \x01(\x05B\x03\xe0A\x01R\bpageSize\x12\"\n" +
"\n" + "\n" +
"page_token\x18\x03 \x01(\tB\x03\xe0A\x01R\tpageToken\x12.\n" + "page_token\x18\x02 \x01(\tB\x03\xe0A\x01R\tpageToken\x12.\n" +
"\x05state\x18\x04 \x01(\x0e2\x13.memos.api.v1.StateB\x03\xe0A\x01R\x05state\x12\x1e\n" + "\x05state\x18\x03 \x01(\x0e2\x13.memos.api.v1.StateB\x03\xe0A\x01R\x05state\x12\x1e\n" +
"\border_by\x18\x05 \x01(\tB\x03\xe0A\x01R\aorderBy\x12\x1b\n" + "\border_by\x18\x05 \x01(\tB\x03\xe0A\x01R\aorderBy\x12\x1b\n" +
"\x06filter\x18\x06 \x01(\tB\x03\xe0A\x01R\x06filter\x12&\n" + "\x06filter\x18\x06 \x01(\tB\x03\xe0A\x01R\x06filter\x12&\n" +
"\fshow_deleted\x18\a \x01(\bB\x03\xe0A\x01R\vshowDeleted\"\x84\x01\n" + "\fshow_deleted\x18\a \x01(\bB\x03\xe0A\x01R\vshowDeleted\"\x84\x01\n" +
...@@ -2187,11 +2174,11 @@ const file_api_v1_memo_service_proto_rawDesc = "" + ...@@ -2187,11 +2174,11 @@ const file_api_v1_memo_service_proto_rawDesc = "" +
"\aPRIVATE\x10\x01\x12\r\n" + "\aPRIVATE\x10\x01\x12\r\n" +
"\tPROTECTED\x10\x02\x12\n" + "\tPROTECTED\x10\x02\x12\n" +
"\n" + "\n" +
"\x06PUBLIC\x10\x032\x97\x11\n" + "\x06PUBLIC\x10\x032\xeb\x10\n" +
"\vMemoService\x12e\n" + "\vMemoService\x12e\n" +
"\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\x12\x91\x01\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" +
"\tListMemos\x12\x1e.memos.api.v1.ListMemosRequest\x1a\x1f.memos.api.v1.ListMemosResponse\"C\xdaA\x00\xdaA\x06parent\x82\xd3\xe4\x93\x021Z \x12\x1e/api/v1/{parent=users/*}/memos\x12\r/api/v1/memos\x12b\n" + "\tListMemos\x12\x1e.memos.api.v1.ListMemosRequest\x1a\x1f.memos.api.v1.ListMemosResponse\"\x18\xdaA\x00\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/memos\x12b\n" +
"\aGetMemo\x12\x1c.memos.api.v1.GetMemoRequest\x1a\x12.memos.api.v1.Memo\"%\xdaA\x04name\x82\xd3\xe4\x93\x02\x18\x12\x16/api/v1/{name=memos/*}\x12\x7f\n" + "\aGetMemo\x12\x1c.memos.api.v1.GetMemoRequest\x1a\x12.memos.api.v1.Memo\"%\xdaA\x04name\x82\xd3\xe4\x93\x02\x18\x12\x16/api/v1/{name=memos/*}\x12\x7f\n" +
"\n" + "\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" + "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" +
......
...@@ -111,59 +111,6 @@ func local_request_MemoService_ListMemos_0(ctx context.Context, marshaler runtim ...@@ -111,59 +111,6 @@ func local_request_MemoService_ListMemos_0(ctx context.Context, marshaler runtim
return msg, metadata, err 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}} 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) { 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 ...@@ -956,26 +903,6 @@ func RegisterMemoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
} }
forward_MemoService_ListMemos_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) 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) { 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()) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
...@@ -1330,23 +1257,6 @@ func RegisterMemoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ...@@ -1330,23 +1257,6 @@ func RegisterMemoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
} }
forward_MemoService_ListMemos_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) 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) { 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()) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
...@@ -1591,7 +1501,6 @@ func RegisterMemoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ...@@ -1591,7 +1501,6 @@ func RegisterMemoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
var ( var (
pattern_MemoService_CreateMemo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "memos"}, "")) 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_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_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_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_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 ( ...@@ -1611,7 +1520,6 @@ var (
var ( var (
forward_MemoService_CreateMemo_0 = runtime.ForwardResponseMessage forward_MemoService_CreateMemo_0 = runtime.ForwardResponseMessage
forward_MemoService_ListMemos_0 = runtime.ForwardResponseMessage forward_MemoService_ListMemos_0 = runtime.ForwardResponseMessage
forward_MemoService_ListMemos_1 = runtime.ForwardResponseMessage
forward_MemoService_GetMemo_0 = runtime.ForwardResponseMessage forward_MemoService_GetMemo_0 = runtime.ForwardResponseMessage
forward_MemoService_UpdateMemo_0 = runtime.ForwardResponseMessage forward_MemoService_UpdateMemo_0 = runtime.ForwardResponseMessage
forward_MemoService_DeleteMemo_0 = runtime.ForwardResponseMessage forward_MemoService_DeleteMemo_0 = runtime.ForwardResponseMessage
......
...@@ -622,14 +622,6 @@ paths: ...@@ -622,14 +622,6 @@ paths:
description: ListMemos lists memos with pagination and filter. description: ListMemos lists memos with pagination and filter.
operationId: MemoService_ListMemos operationId: MemoService_ListMemos
parameters: 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 - name: pageSize
in: query in: query
description: |- description: |-
...@@ -1597,82 +1589,6 @@ paths: ...@@ -1597,82 +1589,6 @@ paths:
application/json: application/json:
schema: schema:
$ref: '#/components/schemas/Status' $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: /api/v1/users/{user}/sessions:
get: get:
tags: tags:
......
...@@ -99,13 +99,6 @@ func (s *APIV1Service) ListMemos(ctx context.Context, request *v1pb.ListMemosReq ...@@ -99,13 +99,6 @@ func (s *APIV1Service) ListMemos(ctx context.Context, request *v1pb.ListMemosReq
// Exclude comments by default. // Exclude comments by default.
ExcludeComments: true, 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 { if request.State == v1pb.State_ARCHIVED {
state := store.Archived state := store.Archived
memoFind.RowStatus = &state memoFind.RowStatus = &state
......
...@@ -329,7 +329,23 @@ func (s *APIV1Service) validateFilter(_ context.Context, filterStr string) error ...@@ -329,7 +329,23 @@ func (s *APIV1Service) validateFilter(_ context.Context, filterStr string) error
return errors.Wrap(err, "failed to parse filter") return errors.Wrap(err, "failed to parse filter")
} }
convertCtx := filter.NewConvertContext() 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 { if err != nil {
return errors.Wrap(err, "failed to convert filter to SQL") return errors.Wrap(err, "failed to convert filter to SQL")
} }
......
...@@ -59,7 +59,8 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo ...@@ -59,7 +59,8 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo
} }
convertCtx := filter.NewConvertContext() convertCtx := filter.NewConvertContext()
// ConvertExprToSQL converts the parsed expression to a SQL condition string. // 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 return nil, err
} }
condition := convertCtx.Buffer.String() condition := convertCtx.Buffer.String()
......
This diff is collapsed.
...@@ -148,11 +148,11 @@ func TestConvertExprToSQL(t *testing.T) { ...@@ -148,11 +148,11 @@ func TestConvertExprToSQL(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
db := &DB{}
parsedExpr, err := filter.Parse(tt.filter, filter.MemoFilterCELAttributes...) parsedExpr, err := filter.Parse(tt.filter, filter.MemoFilterCELAttributes...)
require.NoError(t, err) require.NoError(t, err)
convertCtx := filter.NewConvertContext() 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.NoError(t, err)
require.Equal(t, tt.want, convertCtx.Buffer.String()) require.Equal(t, tt.want, convertCtx.Buffer.String())
require.Equal(t, tt.args, convertCtx.Args) require.Equal(t, tt.args, convertCtx.Args)
......
...@@ -51,7 +51,8 @@ func (d *DB) ListMemoRelations(ctx context.Context, find *store.FindMemoRelation ...@@ -51,7 +51,8 @@ func (d *DB) ListMemoRelations(ctx context.Context, find *store.FindMemoRelation
} }
convertCtx := filter.NewConvertContext() convertCtx := filter.NewConvertContext()
// ConvertExprToSQL converts the parsed expression to a SQL condition string. // 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 return nil, err
} }
condition := convertCtx.Buffer.String() condition := convertCtx.Buffer.String()
......
...@@ -51,7 +51,8 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo ...@@ -51,7 +51,8 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo
convertCtx := filter.NewConvertContext() convertCtx := filter.NewConvertContext()
convertCtx.ArgsOffset = len(args) convertCtx.ArgsOffset = len(args)
// ConvertExprToSQL converts the parsed expression to a SQL condition string. // 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 return nil, err
} }
condition := convertCtx.Buffer.String() condition := convertCtx.Buffer.String()
......
This diff is collapsed.
...@@ -148,11 +148,11 @@ func TestConvertExprToSQL(t *testing.T) { ...@@ -148,11 +148,11 @@ func TestConvertExprToSQL(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
db := &DB{}
parsedExpr, err := filter.Parse(tt.filter, filter.MemoFilterCELAttributes...) parsedExpr, err := filter.Parse(tt.filter, filter.MemoFilterCELAttributes...)
require.NoError(t, err) require.NoError(t, err)
convertCtx := filter.NewConvertContext() 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.NoError(t, err)
require.Equal(t, tt.want, convertCtx.Buffer.String()) require.Equal(t, tt.want, convertCtx.Buffer.String())
require.Equal(t, tt.args, convertCtx.Args) require.Equal(t, tt.args, convertCtx.Args)
......
...@@ -58,7 +58,8 @@ func (d *DB) ListMemoRelations(ctx context.Context, find *store.FindMemoRelation ...@@ -58,7 +58,8 @@ func (d *DB) ListMemoRelations(ctx context.Context, find *store.FindMemoRelation
convertCtx := filter.NewConvertContext() convertCtx := filter.NewConvertContext()
convertCtx.ArgsOffset = len(args) convertCtx.ArgsOffset = len(args)
// ConvertExprToSQL converts the parsed expression to a SQL condition string. // 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 return nil, err
} }
condition := convertCtx.Buffer.String() condition := convertCtx.Buffer.String()
......
...@@ -51,7 +51,8 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo ...@@ -51,7 +51,8 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo
} }
convertCtx := filter.NewConvertContext() convertCtx := filter.NewConvertContext()
// ConvertExprToSQL converts the parsed expression to a SQL condition string. // 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 return nil, err
} }
condition := convertCtx.Buffer.String() condition := convertCtx.Buffer.String()
......
This diff is collapsed.
...@@ -153,11 +153,11 @@ func TestConvertExprToSQL(t *testing.T) { ...@@ -153,11 +153,11 @@ func TestConvertExprToSQL(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
db := &DB{}
parsedExpr, err := filter.Parse(tt.filter, filter.MemoFilterCELAttributes...) parsedExpr, err := filter.Parse(tt.filter, filter.MemoFilterCELAttributes...)
require.NoError(t, err) require.NoError(t, err)
convertCtx := filter.NewConvertContext() 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.NoError(t, err)
require.Equal(t, tt.want, convertCtx.Buffer.String()) require.Equal(t, tt.want, convertCtx.Buffer.String())
require.Equal(t, tt.args, convertCtx.Args) require.Equal(t, tt.args, convertCtx.Args)
......
...@@ -57,7 +57,8 @@ func (d *DB) ListMemoRelations(ctx context.Context, find *store.FindMemoRelation ...@@ -57,7 +57,8 @@ func (d *DB) ListMemoRelations(ctx context.Context, find *store.FindMemoRelation
} }
convertCtx := filter.NewConvertContext() convertCtx := filter.NewConvertContext()
// ConvertExprToSQL converts the parsed expression to a SQL condition string. // 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 return nil, err
} }
condition := convertCtx.Buffer.String() condition := convertCtx.Buffer.String()
......
...@@ -3,10 +3,6 @@ package store ...@@ -3,10 +3,6 @@ package store
import ( import (
"context" "context"
"database/sql" "database/sql"
exprv1 "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
"github.com/usememos/memos/plugin/filter"
) )
// Driver is an interface for store driver. // Driver is an interface for store driver.
...@@ -73,7 +69,4 @@ type Driver interface { ...@@ -73,7 +69,4 @@ type Driver interface {
UpsertReaction(ctx context.Context, create *Reaction) (*Reaction, error) UpsertReaction(ctx context.Context, create *Reaction) (*Reaction, error)
ListReactions(ctx context.Context, find *FindReaction) ([]*Reaction, error) ListReactions(ctx context.Context, find *FindReaction) ([]*Reaction, error)
DeleteReaction(ctx context.Context, delete *DeleteReaction) error DeleteReaction(ctx context.Context, delete *DeleteReaction) error
// Shortcut related methods.
ConvertExprToSQL(ctx *filter.ConvertContext, expr *exprv1.Expr) error
} }
...@@ -47,12 +47,14 @@ const AddMemoRelationPopover = (props: Props) => { ...@@ -47,12 +47,14 @@ const AddMemoRelationPopover = (props: Props) => {
setIsFetching(true); setIsFetching(true);
try { try {
const conditions = []; 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) { if (searchText) {
conditions.push(`content.contains("${searchText}")`); conditions.push(`content.contains("${searchText}")`);
} }
const { memos } = await memoServiceClient.listMemos({ const { memos } = await memoServiceClient.listMemos({
parent: user.name, filter: conditions.join(" && "),
filter: conditions.length > 0 ? conditions.join(" && ") : undefined,
pageSize: DEFAULT_LIST_MEMOS_PAGE_SIZE, pageSize: DEFAULT_LIST_MEMOS_PAGE_SIZE,
}); });
setFetchedMemos(memos); setFetchedMemos(memos);
......
...@@ -47,11 +47,20 @@ const PagedMemoList = observer((props: Props) => { ...@@ -47,11 +47,20 @@ const PagedMemoList = observer((props: Props) => {
setIsRequesting(true); setIsRequesting(true);
try { 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({ const response = await memoStore.fetchMemos({
parent: props.owner || "",
state: props.state || State.NORMAL, state: props.state || State.NORMAL,
orderBy: props.orderBy || "display_time desc", orderBy: props.orderBy || "display_time desc",
filter: props.filter || "", filter: filters.length > 0 ? filters.join(" && ") : undefined,
pageSize: props.pageSize || DEFAULT_LIST_MEMOS_PAGE_SIZE, pageSize: props.pageSize || DEFAULT_LIST_MEMOS_PAGE_SIZE,
pageToken, pageToken,
}); });
......
...@@ -5,6 +5,7 @@ import MemoView from "@/components/MemoView"; ...@@ -5,6 +5,7 @@ import MemoView from "@/components/MemoView";
import PagedMemoList from "@/components/PagedMemoList"; import PagedMemoList from "@/components/PagedMemoList";
import useCurrentUser from "@/hooks/useCurrentUser"; import useCurrentUser from "@/hooks/useCurrentUser";
import { viewStore, userStore, workspaceStore } from "@/store"; import { viewStore, userStore, workspaceStore } from "@/store";
import { extractUserIdFromName } from "@/store/common";
import memoFilterStore from "@/store/memoFilter"; import memoFilterStore from "@/store/memoFilter";
import { State } from "@/types/proto/api/v1/common"; import { State } from "@/types/proto/api/v1/common";
import { Memo } from "@/types/proto/api/v1/memo_service"; import { Memo } from "@/types/proto/api/v1/memo_service";
...@@ -22,7 +23,7 @@ const Home = observer(() => { ...@@ -22,7 +23,7 @@ const Home = observer(() => {
const selectedShortcut = userStore.state.shortcuts.find((shortcut) => getShortcutId(shortcut.name) === memoFilterStore.shortcut); const selectedShortcut = userStore.state.shortcuts.find((shortcut) => getShortcutId(shortcut.name) === memoFilterStore.shortcut);
const memoFilter = useMemo(() => { const memoFilter = useMemo(() => {
const conditions = []; const conditions = [`creator_id == "${extractUserIdFromName(user.name)}"`];
if (selectedShortcut?.filter) { if (selectedShortcut?.filter) {
conditions.push(selectedShortcut.filter); conditions.push(selectedShortcut.filter);
} }
......
...@@ -11,6 +11,7 @@ import UserAvatar from "@/components/UserAvatar"; ...@@ -11,6 +11,7 @@ import UserAvatar from "@/components/UserAvatar";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import useLoading from "@/hooks/useLoading"; import useLoading from "@/hooks/useLoading";
import { viewStore, userStore } from "@/store"; import { viewStore, userStore } from "@/store";
import { extractUserIdFromName } from "@/store/common";
import memoFilterStore from "@/store/memoFilter"; import memoFilterStore from "@/store/memoFilter";
import { State } from "@/types/proto/api/v1/common"; import { State } from "@/types/proto/api/v1/common";
import { Memo } from "@/types/proto/api/v1/memo_service"; import { Memo } from "@/types/proto/api/v1/memo_service";
...@@ -46,7 +47,7 @@ const UserProfile = observer(() => { ...@@ -46,7 +47,7 @@ const UserProfile = observer(() => {
return undefined; return undefined;
} }
const conditions = []; const conditions = [`creator_id == "${extractUserIdFromName(user.name)}"`];
for (const filter of memoFilterStore.filters) { for (const filter of memoFilterStore.filters) {
if (filter.factor === "contentSearch") { if (filter.factor === "contentSearch") {
conditions.push(`content.contains("${filter.value}")`); conditions.push(`content.contains("${filter.value}")`);
......
...@@ -4,6 +4,10 @@ export const memoNamePrefix = "memos/"; ...@@ -4,6 +4,10 @@ export const memoNamePrefix = "memos/";
export const identityProviderNamePrefix = "identityProviders/"; export const identityProviderNamePrefix = "identityProviders/";
export const activityNamePrefix = "activities/"; export const activityNamePrefix = "activities/";
export const extractUserIdFromName = (name: string) => {
return name.split(userNamePrefix).pop() || "";
};
export const extractMemoIdFromName = (name: string) => { export const extractMemoIdFromName = (name: string) => {
return name.split(memoNamePrefix).pop() || ""; return name.split(memoNamePrefix).pop() || "";
}; };
......
...@@ -175,12 +175,6 @@ export interface CreateMemoRequest { ...@@ -175,12 +175,6 @@ export interface CreateMemoRequest {
} }
export interface ListMemosRequest { 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. * Optional. The maximum number of memos to return.
* The service may return fewer than this value. * The service may return fewer than this value.
...@@ -1090,30 +1084,19 @@ export const CreateMemoRequest: MessageFns<CreateMemoRequest> = { ...@@ -1090,30 +1084,19 @@ export const CreateMemoRequest: MessageFns<CreateMemoRequest> = {
}; };
function createBaseListMemosRequest(): ListMemosRequest { function createBaseListMemosRequest(): ListMemosRequest {
return { return { pageSize: 0, pageToken: "", state: State.STATE_UNSPECIFIED, orderBy: "", filter: "", showDeleted: false };
parent: "",
pageSize: 0,
pageToken: "",
state: State.STATE_UNSPECIFIED,
orderBy: "",
filter: "",
showDeleted: false,
};
} }
export const ListMemosRequest: MessageFns<ListMemosRequest> = { export const ListMemosRequest: MessageFns<ListMemosRequest> = {
encode(message: ListMemosRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { encode(message: ListMemosRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
if (message.parent !== "") {
writer.uint32(10).string(message.parent);
}
if (message.pageSize !== 0) { if (message.pageSize !== 0) {
writer.uint32(16).int32(message.pageSize); writer.uint32(8).int32(message.pageSize);
} }
if (message.pageToken !== "") { if (message.pageToken !== "") {
writer.uint32(26).string(message.pageToken); writer.uint32(18).string(message.pageToken);
} }
if (message.state !== State.STATE_UNSPECIFIED) { if (message.state !== State.STATE_UNSPECIFIED) {
writer.uint32(32).int32(stateToNumber(message.state)); writer.uint32(24).int32(stateToNumber(message.state));
} }
if (message.orderBy !== "") { if (message.orderBy !== "") {
writer.uint32(42).string(message.orderBy); writer.uint32(42).string(message.orderBy);
...@@ -1135,31 +1118,23 @@ export const ListMemosRequest: MessageFns<ListMemosRequest> = { ...@@ -1135,31 +1118,23 @@ export const ListMemosRequest: MessageFns<ListMemosRequest> = {
const tag = reader.uint32(); const tag = reader.uint32();
switch (tag >>> 3) { switch (tag >>> 3) {
case 1: { case 1: {
if (tag !== 10) { if (tag !== 8) {
break;
}
message.parent = reader.string();
continue;
}
case 2: {
if (tag !== 16) {
break; break;
} }
message.pageSize = reader.int32(); message.pageSize = reader.int32();
continue; continue;
} }
case 3: { case 2: {
if (tag !== 26) { if (tag !== 18) {
break; break;
} }
message.pageToken = reader.string(); message.pageToken = reader.string();
continue; continue;
} }
case 4: { case 3: {
if (tag !== 32) { if (tag !== 24) {
break; break;
} }
...@@ -1204,7 +1179,6 @@ export const ListMemosRequest: MessageFns<ListMemosRequest> = { ...@@ -1204,7 +1179,6 @@ export const ListMemosRequest: MessageFns<ListMemosRequest> = {
}, },
fromPartial(object: DeepPartial<ListMemosRequest>): ListMemosRequest { fromPartial(object: DeepPartial<ListMemosRequest>): ListMemosRequest {
const message = createBaseListMemosRequest(); const message = createBaseListMemosRequest();
message.parent = object.parent ?? "";
message.pageSize = object.pageSize ?? 0; message.pageSize = object.pageSize ?? 0;
message.pageToken = object.pageToken ?? ""; message.pageToken = object.pageToken ?? "";
message.state = object.state ?? State.STATE_UNSPECIFIED; message.state = object.state ?? State.STATE_UNSPECIFIED;
...@@ -2662,61 +2636,8 @@ export const MemoServiceDefinition = { ...@@ -2662,61 +2636,8 @@ export const MemoServiceDefinition = {
responseStream: false, responseStream: false,
options: { options: {
_unknownFields: { _unknownFields: {
8410: [new Uint8Array([0]), new Uint8Array([6, 112, 97, 114, 101, 110, 116])], 8410: [new Uint8Array([0])],
578365826: [ 578365826: [new Uint8Array([15, 18, 13, 47, 97, 112, 105, 47, 118, 49, 47, 109, 101, 109, 111, 115])],
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,
]),
],
}, },
}, },
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment