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
9f813620
Unverified
Commit
9f813620
authored
Jun 21, 2022
by
Steven
Committed by
GitHub
Jun 21, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: add `/api/tag` (#82)
parent
cc54be0d
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
108 additions
and
7 deletions
+108
-7
memo.go
api/memo.go
+6
-2
memo.go
server/memo.go
+29
-1
server.go
server/server.go
+1
-0
tag.go
server/tag.go
+51
-0
webhook.go
server/webhook.go
+8
-1
memo.go
store/memo.go
+13
-3
No files found.
api/memo.go
View file @
9f813620
...
@@ -43,7 +43,11 @@ type MemoFind struct {
...
@@ -43,7 +43,11 @@ type MemoFind struct {
// Domain specific fields
// Domain specific fields
Pinned
*
bool
Pinned
*
bool
Tag
*
string
ContentSearch
*
string
// Pagination
Limit
int
Offset
int
}
}
type
MemoDelete
struct
{
type
MemoDelete
struct
{
...
...
server/memo.go
View file @
9f813620
...
@@ -77,7 +77,14 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
...
@@ -77,7 +77,14 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
}
}
tag
:=
c
.
QueryParam
(
"tag"
)
tag
:=
c
.
QueryParam
(
"tag"
)
if
tag
!=
""
{
if
tag
!=
""
{
memoFind
.
Tag
=
&
tag
contentSearch
:=
"#"
+
tag
+
" "
memoFind
.
ContentSearch
=
&
contentSearch
}
if
limit
,
err
:=
strconv
.
Atoi
(
c
.
QueryParam
(
"limit"
));
err
==
nil
{
memoFind
.
Limit
=
limit
}
if
offset
,
err
:=
strconv
.
Atoi
(
c
.
QueryParam
(
"offset"
));
err
==
nil
{
memoFind
.
Offset
=
offset
}
}
list
,
err
:=
s
.
Store
.
FindMemoList
(
memoFind
)
list
,
err
:=
s
.
Store
.
FindMemoList
(
memoFind
)
...
@@ -177,4 +184,25 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
...
@@ -177,4 +184,25 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
return
nil
return
nil
})
})
g
.
GET
(
"/memo/amount"
,
func
(
c
echo
.
Context
)
error
{
userID
:=
c
.
Get
(
getUserIDContextKey
())
.
(
int
)
normalRowStatus
:=
api
.
Normal
memoFind
:=
&
api
.
MemoFind
{
CreatorID
:
&
userID
,
RowStatus
:
&
normalRowStatus
,
}
memoList
,
err
:=
s
.
Store
.
FindMemoList
(
memoFind
)
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to find memo list"
)
.
SetInternal
(
err
)
}
c
.
Response
()
.
Header
()
.
Set
(
echo
.
HeaderContentType
,
echo
.
MIMEApplicationJSONCharsetUTF8
)
if
err
:=
json
.
NewEncoder
(
c
.
Response
()
.
Writer
)
.
Encode
(
len
(
memoList
));
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to encode memo amount"
)
.
SetInternal
(
err
)
}
return
nil
})
}
}
server/server.go
View file @
9f813620
...
@@ -70,6 +70,7 @@ func NewServer(profile *profile.Profile) *Server {
...
@@ -70,6 +70,7 @@ func NewServer(profile *profile.Profile) *Server {
s
.
registerMemoRoutes
(
apiGroup
)
s
.
registerMemoRoutes
(
apiGroup
)
s
.
registerShortcutRoutes
(
apiGroup
)
s
.
registerShortcutRoutes
(
apiGroup
)
s
.
registerResourceRoutes
(
apiGroup
)
s
.
registerResourceRoutes
(
apiGroup
)
s
.
registerTagRoutes
(
apiGroup
)
return
s
return
s
}
}
...
...
server/tag.go
0 → 100644
View file @
9f813620
package
server
import
(
"encoding/json"
"memos/api"
"net/http"
"regexp"
"github.com/labstack/echo/v4"
)
func
(
s
*
Server
)
registerTagRoutes
(
g
*
echo
.
Group
)
{
g
.
GET
(
"/tag"
,
func
(
c
echo
.
Context
)
error
{
userID
:=
c
.
Get
(
getUserIDContextKey
())
.
(
int
)
contentSearch
:=
"#"
memoFind
:=
api
.
MemoFind
{
CreatorID
:
&
userID
,
ContentSearch
:
&
contentSearch
,
}
memoList
,
err
:=
s
.
Store
.
FindMemoList
(
&
memoFind
)
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to find memo list"
)
.
SetInternal
(
err
)
}
tagMapSet
:=
make
(
map
[
string
]
bool
)
r
,
err
:=
regexp
.
Compile
(
"#(.+?) "
)
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to compile regexp"
)
.
SetInternal
(
err
)
}
for
_
,
memo
:=
range
memoList
{
for
_
,
rawTag
:=
range
r
.
FindAllString
(
memo
.
Content
,
-
1
)
{
tag
:=
r
.
ReplaceAllString
(
rawTag
,
"$1"
)
tagMapSet
[
tag
]
=
true
}
}
tagList
:=
[]
string
{}
for
tag
:=
range
tagMapSet
{
tagList
=
append
(
tagList
,
tag
)
}
c
.
Response
()
.
Header
()
.
Set
(
echo
.
HeaderContentType
,
echo
.
MIMEApplicationJSONCharsetUTF8
)
if
err
:=
json
.
NewEncoder
(
c
.
Response
()
.
Writer
)
.
Encode
(
tagList
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to encode tags response"
)
.
SetInternal
(
err
)
}
return
nil
})
}
server/webhook.go
View file @
9f813620
...
@@ -114,7 +114,14 @@ func (s *Server) registerWebhookRoutes(g *echo.Group) {
...
@@ -114,7 +114,14 @@ func (s *Server) registerWebhookRoutes(g *echo.Group) {
}
}
tag
:=
c
.
QueryParam
(
"tag"
)
tag
:=
c
.
QueryParam
(
"tag"
)
if
tag
!=
""
{
if
tag
!=
""
{
memoFind
.
Tag
=
&
tag
contentSearch
:=
tag
+
" "
memoFind
.
ContentSearch
=
&
contentSearch
}
if
limit
,
err
:=
strconv
.
Atoi
(
c
.
QueryParam
(
"limit"
));
err
==
nil
{
memoFind
.
Limit
=
limit
}
if
offset
,
err
:=
strconv
.
Atoi
(
c
.
QueryParam
(
"offset"
));
err
==
nil
{
memoFind
.
Offset
=
offset
}
}
list
,
err
:=
s
.
Store
.
FindMemoList
(
memoFind
)
list
,
err
:=
s
.
Store
.
FindMemoList
(
memoFind
)
...
...
store/memo.go
View file @
9f813620
...
@@ -209,10 +209,20 @@ func findMemoRawList(db *sql.DB, find *api.MemoFind) ([]*memoRaw, error) {
...
@@ -209,10 +209,20 @@ func findMemoRawList(db *sql.DB, find *api.MemoFind) ([]*memoRaw, error) {
if
v
:=
find
.
Pinned
;
v
!=
nil
{
if
v
:=
find
.
Pinned
;
v
!=
nil
{
where
=
append
(
where
,
"id in (SELECT memo_id FROM memo_organizer WHERE pinned = 1 AND user_id = memo.creator_id )"
)
where
=
append
(
where
,
"id in (SELECT memo_id FROM memo_organizer WHERE pinned = 1 AND user_id = memo.creator_id )"
)
}
}
if
v
:=
find
.
Tag
;
v
!=
nil
{
if
v
:=
find
.
ContentSearch
;
v
!=
nil
{
where
,
args
=
append
(
where
,
"content LIKE ?"
),
append
(
args
,
"%
#"
+*
v
+
"
%"
)
where
,
args
=
append
(
where
,
"content LIKE ?"
),
append
(
args
,
"%
"
+*
v
+
"
%"
)
}
}
pagination
:=
""
if
find
.
Limit
>
0
{
pagination
=
fmt
.
Sprintf
(
"%s LIMIT %d"
,
pagination
,
find
.
Limit
)
if
find
.
Offset
>
0
{
pagination
=
fmt
.
Sprintf
(
"%s OFFSET %d"
,
pagination
,
find
.
Offset
)
}
}
println
(
pagination
)
rows
,
err
:=
db
.
Query
(
`
rows
,
err
:=
db
.
Query
(
`
SELECT
SELECT
id,
id,
...
@@ -223,7 +233,7 @@ func findMemoRawList(db *sql.DB, find *api.MemoFind) ([]*memoRaw, error) {
...
@@ -223,7 +233,7 @@ func findMemoRawList(db *sql.DB, find *api.MemoFind) ([]*memoRaw, error) {
row_status
row_status
FROM memo
FROM memo
WHERE `
+
strings
.
Join
(
where
,
" AND "
)
+
`
WHERE `
+
strings
.
Join
(
where
,
" AND "
)
+
`
ORDER BY created_ts DESC`
,
ORDER BY created_ts DESC`
+
pagination
,
args
...
,
args
...
,
)
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
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