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
66829179
Commit
66829179
authored
Feb 03, 2025
by
johnnyjoy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: add validate only to create shortcut
parent
81e8aed6
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
258 additions
and
191 deletions
+258
-191
user_service.proto
proto/api/v1/user_service.proto
+2
-0
user_service.pb.go
proto/gen/api/v1/user_service.pb.go
+194
-183
user_service.pb.gw.go
proto/gen/api/v1/user_service.pb.gw.go
+14
-0
apidocs.swagger.yaml
proto/gen/apidocs.swagger.yaml
+4
-0
user_service_shortcuts.go
server/router/api/v1/user_service_shortcuts.go
+44
-8
No files found.
proto/api/v1/user_service.proto
View file @
66829179
...
...
@@ -301,6 +301,8 @@ message CreateShortcutRequest {
string
parent
=
1
;
Shortcut
shortcut
=
2
;
bool
validate_only
=
3
;
}
message
UpdateShortcutRequest
{
...
...
proto/gen/api/v1/user_service.pb.go
View file @
66829179
This diff is collapsed.
Click to expand it.
proto/gen/api/v1/user_service.pb.gw.go
View file @
66829179
...
...
@@ -643,6 +643,8 @@ func local_request_UserService_ListShortcuts_0(ctx context.Context, marshaler ru
return
msg
,
metadata
,
err
}
var
filter_UserService_CreateShortcut_0
=
&
utilities
.
DoubleArray
{
Encoding
:
map
[
string
]
int
{
"shortcut"
:
0
,
"parent"
:
1
},
Base
:
[]
int
{
1
,
1
,
2
,
0
,
0
},
Check
:
[]
int
{
0
,
1
,
1
,
2
,
3
}}
func
request_UserService_CreateShortcut_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
UserServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
(
protoReq
CreateShortcutRequest
...
...
@@ -660,6 +662,12 @@ func request_UserService_CreateShortcut_0(ctx context.Context, marshaler runtime
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_UserService_CreateShortcut_0
);
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
msg
,
err
:=
client
.
CreateShortcut
(
ctx
,
&
protoReq
,
grpc
.
Header
(
&
metadata
.
HeaderMD
),
grpc
.
Trailer
(
&
metadata
.
TrailerMD
))
return
msg
,
metadata
,
err
}
...
...
@@ -681,6 +689,12 @@ func local_request_UserService_CreateShortcut_0(ctx context.Context, marshaler r
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_UserService_CreateShortcut_0
);
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
msg
,
err
:=
server
.
CreateShortcut
(
ctx
,
&
protoReq
)
return
msg
,
metadata
,
err
}
...
...
proto/gen/apidocs.swagger.yaml
View file @
66829179
...
...
@@ -1579,6 +1579,10 @@ paths:
required
:
true
schema
:
$ref
:
'
#/definitions/apiv1Shortcut'
-
name
:
validateOnly
in
:
query
required
:
false
type
:
boolean
tags
:
-
UserService
/api/v1/{parent}/shortcuts/{id}
:
...
...
server/router/api/v1/user_service_shortcuts.go
View file @
66829179
...
...
@@ -7,6 +7,8 @@ import (
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/emptypb"
"github.com/usememos/memos/internal/util"
"github.com/usememos/memos/plugin/filter"
v1pb
"github.com/usememos/memos/proto/gen/api/v1"
storepb
"github.com/usememos/memos/proto/gen/store"
"github.com/usememos/memos/store"
...
...
@@ -68,6 +70,30 @@ func (s *APIV1Service) CreateShortcut(ctx context.Context, request *v1pb.CreateS
return
nil
,
status
.
Errorf
(
codes
.
PermissionDenied
,
"permission denied"
)
}
newShortcut
:=
&
storepb
.
ShortcutsUserSetting_Shortcut
{
Id
:
util
.
GenUUID
(),
Title
:
request
.
Shortcut
.
GetTitle
(),
Filter
:
request
.
Shortcut
.
GetFilter
(),
}
if
newShortcut
.
Title
==
""
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"title is required"
)
}
if
newShortcut
.
Filter
==
""
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"filter is required"
)
}
else
{
_
,
err
:=
filter
.
Parse
(
newShortcut
.
Filter
,
filter
.
MemoFilterCELAttributes
...
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid filter: %v"
,
err
)
}
}
if
request
.
ValidateOnly
{
return
&
v1pb
.
Shortcut
{
Id
:
newShortcut
.
GetId
(),
Title
:
newShortcut
.
GetTitle
(),
Filter
:
newShortcut
.
GetFilter
(),
},
nil
}
userSetting
,
err
:=
s
.
Store
.
GetUserSetting
(
ctx
,
&
store
.
FindUserSetting
{
UserID
:
&
userID
,
Key
:
storepb
.
UserSettingKey_SHORTCUTS
,
...
...
@@ -79,17 +105,16 @@ func (s *APIV1Service) CreateShortcut(ctx context.Context, request *v1pb.CreateS
userSetting
=
&
storepb
.
UserSetting
{
UserId
:
userID
,
Key
:
storepb
.
UserSettingKey_SHORTCUTS
,
Value
:
&
storepb
.
UserSetting_Shortcuts
{},
Value
:
&
storepb
.
UserSetting_Shortcuts
{
Shortcuts
:
&
storepb
.
ShortcutsUserSetting
{
Shortcuts
:
[]
*
storepb
.
ShortcutsUserSetting_Shortcut
{},
},
},
}
}
shortcutsUserSetting
:=
userSetting
.
GetShortcuts
()
shortcuts
:=
shortcutsUserSetting
.
GetShortcuts
()
shortcuts
=
append
(
shortcuts
,
&
storepb
.
ShortcutsUserSetting_Shortcut
{
Id
:
request
.
Shortcut
.
GetId
(),
Title
:
request
.
Shortcut
.
GetTitle
(),
Filter
:
request
.
Shortcut
.
GetFilter
(),
})
shortcuts
=
append
(
shortcuts
,
newShortcut
)
shortcutsUserSetting
.
Shortcuts
=
shortcuts
userSetting
.
Value
=
&
storepb
.
UserSetting_Shortcuts
{
...
...
@@ -121,7 +146,6 @@ func (s *APIV1Service) UpdateShortcut(ctx context.Context, request *v1pb.UpdateS
if
currentUser
==
nil
||
currentUser
.
ID
!=
userID
{
return
nil
,
status
.
Errorf
(
codes
.
PermissionDenied
,
"permission denied"
)
}
if
request
.
UpdateMask
==
nil
||
len
(
request
.
UpdateMask
.
Paths
)
==
0
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"update mask is required"
)
}
...
...
@@ -144,8 +168,20 @@ func (s *APIV1Service) UpdateShortcut(ctx context.Context, request *v1pb.UpdateS
if
shortcut
.
GetId
()
==
request
.
Shortcut
.
GetId
()
{
for
_
,
field
:=
range
request
.
UpdateMask
.
Paths
{
if
field
==
"title"
{
if
request
.
Shortcut
.
GetTitle
()
==
""
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"title is required"
)
}
shortcut
.
Title
=
request
.
Shortcut
.
GetTitle
()
}
else
if
field
==
"filter"
{
if
request
.
Shortcut
.
GetFilter
()
==
""
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"filter is required"
)
}
else
{
// Validate the filter.
_
,
err
:=
filter
.
Parse
(
request
.
Shortcut
.
GetFilter
(),
filter
.
MemoFilterCELAttributes
...
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid filter: %v"
,
err
)
}
}
shortcut
.
Filter
=
request
.
Shortcut
.
GetFilter
()
}
}
...
...
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