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
de8014df
Unverified
Commit
de8014df
authored
May 25, 2023
by
boojack
Committed by
GitHub
May 25, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: resource store cache (#1742)
parent
b42e5c32
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
64 additions
and
53 deletions
+64
-53
memo.go
api/memo.go
+3
-4
memo.go
server/memo.go
+26
-28
resource.go
store/resource.go
+34
-21
store.go
store/store.go
+1
-0
No files found.
api/memo.go
View file @
de8014df
...
@@ -39,10 +39,9 @@ type MemoResponse struct {
...
@@ -39,10 +39,9 @@ type MemoResponse struct {
Pinned
bool
`json:"pinned"`
Pinned
bool
`json:"pinned"`
// Related fields
// Related fields
CreatorName
string
`json:"creatorName"`
CreatorName
string
`json:"creatorName"`
ResourceIDList
[]
int
ResourceList
[]
*
Resource
`json:"resourceList"`
ResourceList
[]
*
Resource
`json:"resourceList"`
RelationList
[]
*
MemoRelation
`json:"relationList"`
RelationList
[]
*
MemoRelation
`json:"relationList"`
}
}
type
CreateMemoRequest
struct
{
type
CreateMemoRequest
struct
{
...
...
server/memo.go
View file @
de8014df
...
@@ -119,7 +119,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
...
@@ -119,7 +119,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo"
)
.
SetInternal
(
err
)
}
}
memoResponse
,
err
:=
s
.
ComposeMemoResponse
(
ctx
,
convertMemoMessageToMemoResponse
(
memoMessage
)
)
memoResponse
,
err
:=
s
.
composeMemoMessageToMemoResponse
(
ctx
,
memoMessage
)
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
}
}
...
@@ -235,7 +235,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
...
@@ -235,7 +235,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to find memo"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to find memo"
)
.
SetInternal
(
err
)
}
}
memoResponse
,
err
:=
s
.
ComposeMemoResponse
(
ctx
,
convertMemoMessageToMemoResponse
(
memoMessage
)
)
memoResponse
,
err
:=
s
.
composeMemoMessageToMemoResponse
(
ctx
,
memoMessage
)
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
}
}
...
@@ -298,7 +298,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
...
@@ -298,7 +298,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
}
}
memoResponseList
:=
[]
*
api
.
MemoResponse
{}
memoResponseList
:=
[]
*
api
.
MemoResponse
{}
for
_
,
memoMessage
:=
range
memoMessageList
{
for
_
,
memoMessage
:=
range
memoMessageList
{
memoResponse
,
err
:=
s
.
ComposeMemoResponse
(
ctx
,
convertMemoMessageToMemoResponse
(
memoMessage
)
)
memoResponse
,
err
:=
s
.
composeMemoMessageToMemoResponse
(
ctx
,
memoMessage
)
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
}
}
...
@@ -334,7 +334,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
...
@@ -334,7 +334,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
return
echo
.
NewHTTPError
(
http
.
StatusForbidden
,
"this memo is protected, missing user in session"
)
return
echo
.
NewHTTPError
(
http
.
StatusForbidden
,
"this memo is protected, missing user in session"
)
}
}
}
}
memoResponse
,
err
:=
s
.
ComposeMemoResponse
(
ctx
,
convertMemoMessageToMemoResponse
(
memoMessage
)
)
memoResponse
,
err
:=
s
.
composeMemoMessageToMemoResponse
(
ctx
,
memoMessage
)
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
}
}
...
@@ -373,7 +373,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
...
@@ -373,7 +373,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
}
}
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
fmt
.
Sprintf
(
"Failed to find memo by ID: %v"
,
memoID
))
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
fmt
.
Sprintf
(
"Failed to find memo by ID: %v"
,
memoID
))
.
SetInternal
(
err
)
}
}
memoResponse
,
err
:=
s
.
ComposeMemoResponse
(
ctx
,
convertMemoMessageToMemoResponse
(
memoMessage
)
)
memoResponse
,
err
:=
s
.
composeMemoMessageToMemoResponse
(
ctx
,
memoMessage
)
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
}
}
...
@@ -461,7 +461,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
...
@@ -461,7 +461,7 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
}
}
memoResponseList
:=
[]
*
api
.
MemoResponse
{}
memoResponseList
:=
[]
*
api
.
MemoResponse
{}
for
_
,
memoMessage
:=
range
memoMessageList
{
for
_
,
memoMessage
:=
range
memoMessageList
{
memoResponse
,
err
:=
s
.
ComposeMemoResponse
(
ctx
,
convertMemoMessageToMemoResponse
(
memoMessage
)
)
memoResponse
,
err
:=
s
.
composeMemoMessageToMemoResponse
(
ctx
,
memoMessage
)
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compose memo response"
)
.
SetInternal
(
err
)
}
}
...
@@ -584,27 +584,18 @@ func convertCreateMemoRequestToMemoMessage(memoCreate *api.CreateMemoRequest) *s
...
@@ -584,27 +584,18 @@ func convertCreateMemoRequestToMemoMessage(memoCreate *api.CreateMemoRequest) *s
}
}
}
}
func
convertMemoMessageToMemoResponse
(
memoMessage
*
store
.
MemoMessage
)
*
api
.
MemoResponse
{
func
(
s
*
Server
)
composeMemoMessageToMemoResponse
(
ctx
context
.
Context
,
memoMessage
*
store
.
MemoMessage
)
(
*
api
.
MemoResponse
,
error
)
{
relationList
:=
[]
*
api
.
MemoRelation
{}
memoResponse
:=
&
api
.
MemoResponse
{
for
_
,
relation
:=
range
memoMessage
.
RelationList
{
ID
:
memoMessage
.
ID
,
relationList
=
append
(
relationList
,
convertMemoRelationMessageToMemoRelation
(
relation
))
RowStatus
:
api
.
RowStatus
(
memoMessage
.
RowStatus
.
String
()),
CreatorID
:
memoMessage
.
CreatorID
,
CreatedTs
:
memoMessage
.
CreatedTs
,
UpdatedTs
:
memoMessage
.
UpdatedTs
,
Content
:
memoMessage
.
Content
,
Visibility
:
api
.
Visibility
(
memoMessage
.
Visibility
.
String
()),
Pinned
:
memoMessage
.
Pinned
,
}
}
return
&
api
.
MemoResponse
{
ID
:
memoMessage
.
ID
,
RowStatus
:
api
.
RowStatus
(
memoMessage
.
RowStatus
.
String
()),
CreatorID
:
memoMessage
.
CreatorID
,
CreatedTs
:
memoMessage
.
CreatedTs
,
UpdatedTs
:
memoMessage
.
UpdatedTs
,
Content
:
memoMessage
.
Content
,
Visibility
:
api
.
Visibility
(
memoMessage
.
Visibility
.
String
()),
Pinned
:
memoMessage
.
Pinned
,
ResourceIDList
:
memoMessage
.
ResourceIDList
,
RelationList
:
relationList
,
}
}
func
(
s
*
Server
)
ComposeMemoResponse
(
ctx
context
.
Context
,
memoResponse
*
api
.
MemoResponse
)
(
*
api
.
MemoResponse
,
error
)
{
user
,
err
:=
s
.
Store
.
FindUser
(
ctx
,
&
api
.
UserFind
{
user
,
err
:=
s
.
Store
.
FindUser
(
ctx
,
&
api
.
UserFind
{
ID
:
&
memoResponse
.
CreatorID
,
ID
:
&
memoResponse
.
CreatorID
,
})
})
...
@@ -618,16 +609,23 @@ func (s *Server) ComposeMemoResponse(ctx context.Context, memoResponse *api.Memo
...
@@ -618,16 +609,23 @@ func (s *Server) ComposeMemoResponse(ctx context.Context, memoResponse *api.Memo
memoResponse
.
CreatorName
=
user
.
Username
memoResponse
.
CreatorName
=
user
.
Username
}
}
memoResponse
.
ResourceList
=
[]
*
api
.
Resource
{}
relationList
:=
[]
*
api
.
MemoRelation
{}
for
_
,
resourceID
:=
range
memoResponse
.
ResourceIDList
{
for
_
,
relation
:=
range
memoMessage
.
RelationList
{
relationList
=
append
(
relationList
,
convertMemoRelationMessageToMemoRelation
(
relation
))
}
memoResponse
.
RelationList
=
relationList
resourceList
:=
[]
*
api
.
Resource
{}
for
_
,
resourceID
:=
range
memoMessage
.
ResourceIDList
{
resource
,
err
:=
s
.
Store
.
FindResource
(
ctx
,
&
api
.
ResourceFind
{
resource
,
err
:=
s
.
Store
.
FindResource
(
ctx
,
&
api
.
ResourceFind
{
ID
:
&
resourceID
,
ID
:
&
resourceID
,
})
})
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
memoResponse
.
ResourceList
=
append
(
memoResponse
.
R
esourceList
,
resource
)
resourceList
=
append
(
r
esourceList
,
resource
)
}
}
memoResponse
.
ResourceList
=
resourceList
return
memoResponse
,
nil
return
memoResponse
,
nil
}
}
store/resource.go
View file @
de8014df
...
@@ -73,6 +73,28 @@ func (s *Store) CreateResource(ctx context.Context, create *api.ResourceCreate)
...
@@ -73,6 +73,28 @@ func (s *Store) CreateResource(ctx context.Context, create *api.ResourceCreate)
return
resource
,
nil
return
resource
,
nil
}
}
func
(
s
*
Store
)
PatchResource
(
ctx
context
.
Context
,
patch
*
api
.
ResourcePatch
)
(
*
api
.
Resource
,
error
)
{
tx
,
err
:=
s
.
db
.
BeginTx
(
ctx
,
nil
)
if
err
!=
nil
{
return
nil
,
FormatError
(
err
)
}
defer
tx
.
Rollback
()
resourceRaw
,
err
:=
patchResourceImpl
(
ctx
,
tx
,
patch
)
if
err
!=
nil
{
return
nil
,
err
}
if
err
:=
tx
.
Commit
();
err
!=
nil
{
return
nil
,
FormatError
(
err
)
}
s
.
resourceCache
.
Store
(
resourceRaw
.
ID
,
resourceRaw
)
resource
:=
resourceRaw
.
toResource
()
return
resource
,
nil
}
func
(
s
*
Store
)
FindResourceList
(
ctx
context
.
Context
,
find
*
api
.
ResourceFind
)
([]
*
api
.
Resource
,
error
)
{
func
(
s
*
Store
)
FindResourceList
(
ctx
context
.
Context
,
find
*
api
.
ResourceFind
)
([]
*
api
.
Resource
,
error
)
{
tx
,
err
:=
s
.
db
.
BeginTx
(
ctx
,
nil
)
tx
,
err
:=
s
.
db
.
BeginTx
(
ctx
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -87,6 +109,9 @@ func (s *Store) FindResourceList(ctx context.Context, find *api.ResourceFind) ([
...
@@ -87,6 +109,9 @@ func (s *Store) FindResourceList(ctx context.Context, find *api.ResourceFind) ([
resourceList
:=
[]
*
api
.
Resource
{}
resourceList
:=
[]
*
api
.
Resource
{}
for
_
,
raw
:=
range
resourceRawList
{
for
_
,
raw
:=
range
resourceRawList
{
if
!
find
.
GetBlob
{
s
.
resourceCache
.
Store
(
raw
.
ID
,
raw
)
}
resourceList
=
append
(
resourceList
,
raw
.
toResource
())
resourceList
=
append
(
resourceList
,
raw
.
toResource
())
}
}
...
@@ -94,6 +119,11 @@ func (s *Store) FindResourceList(ctx context.Context, find *api.ResourceFind) ([
...
@@ -94,6 +119,11 @@ func (s *Store) FindResourceList(ctx context.Context, find *api.ResourceFind) ([
}
}
func
(
s
*
Store
)
FindResource
(
ctx
context
.
Context
,
find
*
api
.
ResourceFind
)
(
*
api
.
Resource
,
error
)
{
func
(
s
*
Store
)
FindResource
(
ctx
context
.
Context
,
find
*
api
.
ResourceFind
)
(
*
api
.
Resource
,
error
)
{
if
!
find
.
GetBlob
&&
find
.
ID
!=
nil
{
if
raw
,
ok
:=
s
.
resourceCache
.
Load
(
find
.
ID
);
ok
{
return
raw
.
(
*
resourceRaw
)
.
toResource
(),
nil
}
}
tx
,
err
:=
s
.
db
.
BeginTx
(
ctx
,
nil
)
tx
,
err
:=
s
.
db
.
BeginTx
(
ctx
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
FormatError
(
err
)
return
nil
,
FormatError
(
err
)
...
@@ -110,6 +140,9 @@ func (s *Store) FindResource(ctx context.Context, find *api.ResourceFind) (*api.
...
@@ -110,6 +140,9 @@ func (s *Store) FindResource(ctx context.Context, find *api.ResourceFind) (*api.
}
}
resourceRaw
:=
list
[
0
]
resourceRaw
:=
list
[
0
]
if
!
find
.
GetBlob
{
s
.
resourceCache
.
Store
(
resourceRaw
.
ID
,
resourceRaw
)
}
resource
:=
resourceRaw
.
toResource
()
resource
:=
resourceRaw
.
toResource
()
return
resource
,
nil
return
resource
,
nil
...
@@ -132,31 +165,11 @@ func (s *Store) DeleteResource(ctx context.Context, delete *api.ResourceDelete)
...
@@ -132,31 +165,11 @@ func (s *Store) DeleteResource(ctx context.Context, delete *api.ResourceDelete)
if
err
:=
tx
.
Commit
();
err
!=
nil
{
if
err
:=
tx
.
Commit
();
err
!=
nil
{
return
FormatError
(
err
)
return
FormatError
(
err
)
}
}
s
.
resourceCache
.
Delete
(
delete
.
ID
)
return
nil
return
nil
}
}
func
(
s
*
Store
)
PatchResource
(
ctx
context
.
Context
,
patch
*
api
.
ResourcePatch
)
(
*
api
.
Resource
,
error
)
{
tx
,
err
:=
s
.
db
.
BeginTx
(
ctx
,
nil
)
if
err
!=
nil
{
return
nil
,
FormatError
(
err
)
}
defer
tx
.
Rollback
()
resourceRaw
,
err
:=
patchResourceImpl
(
ctx
,
tx
,
patch
)
if
err
!=
nil
{
return
nil
,
err
}
if
err
:=
tx
.
Commit
();
err
!=
nil
{
return
nil
,
FormatError
(
err
)
}
resource
:=
resourceRaw
.
toResource
()
return
resource
,
nil
}
func
createResourceImpl
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
,
create
*
api
.
ResourceCreate
)
(
*
resourceRaw
,
error
)
{
func
createResourceImpl
(
ctx
context
.
Context
,
tx
*
sql
.
Tx
,
create
*
api
.
ResourceCreate
)
(
*
resourceRaw
,
error
)
{
fields
:=
[]
string
{
"filename"
,
"blob"
,
"external_link"
,
"type"
,
"size"
,
"creator_id"
,
"internal_path"
,
"public_id"
}
fields
:=
[]
string
{
"filename"
,
"blob"
,
"external_link"
,
"type"
,
"size"
,
"creator_id"
,
"internal_path"
,
"public_id"
}
values
:=
[]
any
{
create
.
Filename
,
create
.
Blob
,
create
.
ExternalLink
,
create
.
Type
,
create
.
Size
,
create
.
CreatorID
,
create
.
InternalPath
,
create
.
PublicID
}
values
:=
[]
any
{
create
.
Filename
,
create
.
Blob
,
create
.
ExternalLink
,
create
.
Type
,
create
.
Size
,
create
.
CreatorID
,
create
.
InternalPath
,
create
.
PublicID
}
...
...
store/store.go
View file @
de8014df
...
@@ -17,6 +17,7 @@ type Store struct {
...
@@ -17,6 +17,7 @@ type Store struct {
userSettingCache
sync
.
Map
// map[string]*userSettingRaw
userSettingCache
sync
.
Map
// map[string]*userSettingRaw
shortcutCache
sync
.
Map
// map[int]*shortcutRaw
shortcutCache
sync
.
Map
// map[int]*shortcutRaw
idpCache
sync
.
Map
// map[int]*identityProviderMessage
idpCache
sync
.
Map
// map[int]*identityProviderMessage
resourceCache
sync
.
Map
// map[int]*resourceRaw
}
}
// New creates a new instance of Store.
// New creates a new instance of Store.
...
...
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