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
7ae4299d
Commit
7ae4299d
authored
Jan 15, 2024
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: implement create resource
parent
3d23c01e
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
44 additions
and
10 deletions
+44
-10
memo_resource_service.go
api/v2/memo_resource_service.go
+1
-1
resource_service.go
api/v2/resource_service.go
+35
-0
api.ts
web/src/helpers/api.ts
+0
-4
resource.ts
web/src/store/module/resource.ts
+8
-5
No files found.
api/v2/memo_resource_service.go
View file @
7ae4299d
...
...
@@ -48,7 +48,7 @@ func (s *APIV2Service) SetMemoResources(ctx context.Context, request *apiv2pb.Se
MemoID
:
&
request
.
Id
,
UpdatedTs
:
&
updatedTs
,
});
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to update resource
"
)
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to update resource
: %v"
,
err
)
}
}
...
...
api/v2/resource_service.go
View file @
7ae4299d
...
...
@@ -2,6 +2,7 @@ package v2
import
(
"context"
"net/url"
"time"
"google.golang.org/grpc/codes"
...
...
@@ -12,6 +13,40 @@ import (
"github.com/usememos/memos/store"
)
func
(
s
*
APIV2Service
)
CreateResource
(
ctx
context
.
Context
,
request
*
apiv2pb
.
CreateResourceRequest
)
(
*
apiv2pb
.
CreateResourceResponse
,
error
)
{
user
,
err
:=
getCurrentUser
(
ctx
,
s
.
Store
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to get current user: %v"
,
err
)
}
if
request
.
ExternalLink
!=
""
{
// Only allow those external links scheme with http/https
linkURL
,
err
:=
url
.
Parse
(
request
.
ExternalLink
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid external link: %v"
,
err
)
}
if
linkURL
.
Scheme
!=
"http"
&&
linkURL
.
Scheme
!=
"https"
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid external link scheme: %v"
,
linkURL
.
Scheme
)
}
}
create
:=
&
store
.
Resource
{
CreatorID
:
user
.
ID
,
Filename
:
request
.
Filename
,
ExternalLink
:
request
.
ExternalLink
,
Type
:
request
.
Type
,
}
if
request
.
MemoId
!=
nil
{
create
.
MemoID
=
request
.
MemoId
}
resource
,
err
:=
s
.
Store
.
CreateResource
(
ctx
,
create
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to create resource: %v"
,
err
)
}
return
&
apiv2pb
.
CreateResourceResponse
{
Resource
:
s
.
convertResourceFromStore
(
ctx
,
resource
),
},
nil
}
func
(
s
*
APIV2Service
)
ListResources
(
ctx
context
.
Context
,
_
*
apiv2pb
.
ListResourcesRequest
)
(
*
apiv2pb
.
ListResourcesResponse
,
error
)
{
user
,
err
:=
getCurrentUser
(
ctx
,
s
.
Store
)
if
err
!=
nil
{
...
...
web/src/helpers/api.ts
View file @
7ae4299d
...
...
@@ -44,10 +44,6 @@ export function signout() {
return
axios
.
post
(
"/api/v1/auth/signout"
);
}
export
function
createResource
(
resourceCreate
:
ResourceCreate
)
{
return
axios
.
post
<
Resource
>
(
"/api/v1/resource"
,
resourceCreate
);
}
export
function
createResourceWithBlob
(
formData
:
FormData
)
{
return
axios
.
post
<
Resource
>
(
"/api/v1/resource/blob"
,
formData
);
}
...
...
web/src/store/module/resource.ts
View file @
7ae4299d
import
{
resourceServiceClient
}
from
"@/grpcweb"
;
import
*
as
api
from
"@/helpers/api"
;
import
{
Resource
,
UpdateResourceRequest
}
from
"@/types/proto/api/v2/resource_service"
;
import
{
CreateResourceRequest
,
Resource
,
UpdateResourceRequest
}
from
"@/types/proto/api/v2/resource_service"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
store
,
{
useAppSelector
}
from
"../"
;
import
{
patchResource
,
setResources
}
from
"../reducer/resource"
;
...
...
@@ -17,8 +17,11 @@ export const useResourceStore = () => {
getState
:
()
=>
{
return
store
.
getState
().
resource
;
},
async
createResource
(
resourceCreate
:
ResourceCreate
):
Promise
<
Resource
>
{
const
{
data
:
resource
}
=
await
api
.
createResource
(
resourceCreate
);
async
createResource
(
create
:
CreateResourceRequest
):
Promise
<
Resource
>
{
const
{
resource
}
=
await
resourceServiceClient
.
createResource
(
create
);
if
(
!
resource
)
{
throw
new
Error
(
"resource is null"
);
}
const
resourceList
=
state
.
resources
;
store
.
dispatch
(
setResources
([
resource
,
...
resourceList
]));
return
resource
;
...
...
@@ -36,8 +39,8 @@ export const useResourceStore = () => {
store
.
dispatch
(
setResources
([
resource
,
...
resourceList
]));
return
resource
;
},
async
updateResource
(
request
:
UpdateResourceRequest
):
Promise
<
Resource
>
{
const
{
resource
}
=
await
resourceServiceClient
.
updateResource
(
request
);
async
updateResource
(
update
:
UpdateResourceRequest
):
Promise
<
Resource
>
{
const
{
resource
}
=
await
resourceServiceClient
.
updateResource
(
update
);
if
(
!
resource
)
{
throw
new
Error
(
"resource is null"
);
}
...
...
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