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
e0600388
Commit
e0600388
authored
May 22, 2024
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: implement memo property endpoint
parent
16d3de63
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1122 additions
and
653 deletions
+1122
-653
apidocs.swagger.yaml
docs/apidocs.swagger.yaml
+91
-36
memo_service.proto
proto/api/v1/memo_service.proto
+30
-5
memo_service.pb.go
proto/gen/api/v1/memo_service.pb.go
+826
-585
memo_service.pb.gw.go
proto/gen/api/v1/memo_service.pb.gw.go
+106
-3
memo_service_grpc.pb.go
proto/gen/api/v1/memo_service_grpc.pb.go
+39
-0
memo_service.go
server/router/api/v1/memo_service.go
+21
-3
MemoDetail.tsx
web/src/pages/MemoDetail.tsx
+3
-3
Timeline.tsx
web/src/pages/Timeline.tsx
+6
-18
No files found.
docs/apidocs.swagger.yaml
View file @
e0600388
...
@@ -903,9 +903,15 @@ paths:
...
@@ -903,9 +903,15 @@ paths:
type
:
string
type
:
string
pinned
:
pinned
:
type
:
boolean
type
:
boolean
parentId
:
property
:
type
:
integer
$ref
:
'
#/definitions/v1MemoProperty'
format
:
int32
readOnly
:
true
parent
:
type
:
string
description
:
|-
The name of the parent memo.
Format: memos/{id}
id is the system generated id.
readOnly: true
readOnly: true
resources
:
resources
:
type
:
array
type
:
array
...
@@ -1280,6 +1286,60 @@ paths:
...
@@ -1280,6 +1286,60 @@ paths:
$ref
:
'
#/definitions/v1CreateMemoRequest'
$ref
:
'
#/definitions/v1CreateMemoRequest'
tags
:
tags
:
-
MemoService
-
MemoService
/api/v1/{name}/properties
:
get
:
summary
:
ListMemoProperties lists memo properties.
operationId
:
MemoService_ListMemoProperties
responses
:
"
200"
:
description
:
A successful response.
schema
:
$ref
:
'
#/definitions/v1ListMemoPropertiesResponse'
default
:
description
:
An unexpected error response.
schema
:
$ref
:
'
#/definitions/googlerpcStatus'
parameters
:
-
name
:
name
description
:
|-
The name of the memo.
Format: memos/{id}. Use "memos/-" to list all properties.
in: path
required: true
type: string
pattern: memos/[^/]+
tags
:
-
MemoService
/api/v1/{name}/properties:rebuild
:
post
:
summary
:
RebuildMemoProperty rebuilds a memo property.
operationId
:
MemoService_RebuildMemoProperty
responses
:
"
200"
:
description
:
A successful response.
schema
:
type
:
object
properties
:
{}
default
:
description
:
An unexpected error response.
schema
:
$ref
:
'
#/definitions/googlerpcStatus'
parameters
:
-
name
:
name
description
:
|-
The name of the memo.
Format: memos/{id}. Use "memos/-" to rebuild all memos.
in: path
required: true
type: string
pattern: memos/[^/]+
-
name
:
body
in
:
body
required
:
true
schema
:
$ref
:
'
#/definitions/MemoServiceRebuildMemoPropertyBody'
tags
:
-
MemoService
/api/v1/{name}/reactions
:
/api/v1/{name}/reactions
:
get
:
get
:
summary
:
ListMemoReactions lists reactions for a memo.
summary
:
ListMemoReactions lists reactions for a memo.
...
@@ -1462,36 +1522,6 @@ paths:
...
@@ -1462,36 +1522,6 @@ paths:
pattern: users/[^/]+
pattern: users/[^/]+
tags
:
tags
:
-
UserService
-
UserService
/api/v1/{name}:rebuild
:
post
:
summary
:
RebuildMemoProperty rebuilds a memo property.
operationId
:
MemoService_RebuildMemoProperty
responses
:
"
200"
:
description
:
A successful response.
schema
:
type
:
object
properties
:
{}
default
:
description
:
An unexpected error response.
schema
:
$ref
:
'
#/definitions/googlerpcStatus'
parameters
:
-
name
:
name
description
:
|-
The name of the memo.
Format: memos/{id}. Use "memos/-" to rebuild all memos.
in: path
required: true
type: string
pattern: memos/[^/]+
-
name
:
body
in
:
body
required
:
true
schema
:
$ref
:
'
#/definitions/MemoServiceRebuildMemoPropertyBody'
tags
:
-
MemoService
/api/v1/{parent}/tags
:
/api/v1/{parent}/tags
:
get
:
get
:
summary
:
ListMemoTags lists tags for a memo.
summary
:
ListMemoTags lists tags for a memo.
...
@@ -2485,6 +2515,14 @@ definitions:
...
@@ -2485,6 +2515,14 @@ definitions:
items
:
items
:
type
:
object
type
:
object
$ref
:
'
#/definitions/v1Memo'
$ref
:
'
#/definitions/v1Memo'
v1ListMemoPropertiesResponse
:
type
:
object
properties
:
properties
:
type
:
array
items
:
type
:
object
$ref
:
'
#/definitions/v1MemoProperty'
v1ListMemoReactionsResponse
:
v1ListMemoReactionsResponse
:
type
:
object
type
:
object
properties
:
properties
:
...
@@ -2620,9 +2658,15 @@ definitions:
...
@@ -2620,9 +2658,15 @@ definitions:
type
:
string
type
:
string
pinned
:
pinned
:
type
:
boolean
type
:
boolean
parentId
:
property
:
type
:
integer
$ref
:
'
#/definitions/v1MemoProperty'
format
:
int32
readOnly
:
true
parent
:
type
:
string
description
:
|-
The name of the parent memo.
Format: memos/{id}
id is the system generated id.
readOnly: true
readOnly: true
resources
:
resources
:
type
:
array
type
:
array
...
@@ -2642,6 +2686,17 @@ definitions:
...
@@ -2642,6 +2686,17 @@ definitions:
type
:
object
type
:
object
$ref
:
'
#/definitions/v1Reaction'
$ref
:
'
#/definitions/v1Reaction'
readOnly
:
true
readOnly
:
true
v1MemoProperty
:
type
:
object
properties
:
tags
:
type
:
array
items
:
type
:
string
hasLink
:
type
:
boolean
hasTaskList
:
type
:
boolean
v1MemoRelation
:
v1MemoRelation
:
type
:
object
type
:
object
properties
:
properties
:
...
...
proto/api/v1/memo_service.proto
View file @
e0600388
...
@@ -57,10 +57,14 @@ service MemoService {
...
@@ -57,10 +57,14 @@ service MemoService {
body
:
"*"
body
:
"*"
};
};
}
}
// ListMemoProperties lists memo properties.
rpc
ListMemoProperties
(
ListMemoPropertiesRequest
)
returns
(
ListMemoPropertiesResponse
)
{
option
(
google.api.http
)
=
{
get
:
"/api/v1/{name=memos/*}/properties"
};
}
// RebuildMemoProperty rebuilds a memo property.
// RebuildMemoProperty rebuilds a memo property.
rpc
RebuildMemoProperty
(
RebuildMemoPropertyRequest
)
returns
(
google.protobuf.Empty
)
{
rpc
RebuildMemoProperty
(
RebuildMemoPropertyRequest
)
returns
(
google.protobuf.Empty
)
{
option
(
google.api.http
)
=
{
option
(
google.api.http
)
=
{
post
:
"/api/v1/{name=memos/*}:rebuild"
post
:
"/api/v1/{name=memos/*}
/properties
:rebuild"
body
:
"*"
body
:
"*"
};
};
}
}
...
@@ -181,13 +185,24 @@ message Memo {
...
@@ -181,13 +185,24 @@ message Memo {
bool
pinned
=
12
;
bool
pinned
=
12
;
optional
int32
parent_id
=
13
[(
google.api.field_behavior
)
=
OUTPUT_ONLY
];
MemoProperty
property
=
13
[(
google.api.field_behavior
)
=
OUTPUT_ONLY
];
// The name of the parent memo.
// Format: memos/{id}
// id is the system generated id.
optional
string
parent
=
14
[(
google.api.field_behavior
)
=
OUTPUT_ONLY
];
repeated
Resource
resources
=
15
[(
google.api.field_behavior
)
=
OUTPUT_ONLY
];
repeated
Resource
resources
=
14
[(
google.api.field_behavior
)
=
OUTPUT_ONLY
];
repeated
MemoRelation
relations
=
16
[(
google.api.field_behavior
)
=
OUTPUT_ONLY
];
repeated
MemoRelation
relations
=
15
[(
google.api.field_behavior
)
=
OUTPUT_ONLY
];
repeated
Reaction
reactions
=
17
[(
google.api.field_behavior
)
=
OUTPUT_ONLY
];
}
repeated
Reaction
reactions
=
16
[(
google.api.field_behavior
)
=
OUTPUT_ONLY
];
message
MemoProperty
{
repeated
string
tags
=
1
;
bool
has_link
=
2
;
bool
has_task_list
=
3
;
}
}
message
CreateMemoRequest
{
message
CreateMemoRequest
{
...
@@ -254,6 +269,16 @@ message ExportMemosResponse {
...
@@ -254,6 +269,16 @@ message ExportMemosResponse {
bytes
content
=
1
;
bytes
content
=
1
;
}
}
message
ListMemoPropertiesRequest
{
// The name of the memo.
// Format: memos/{id}. Use "memos/-" to list all properties.
string
name
=
1
;
}
message
ListMemoPropertiesResponse
{
repeated
MemoProperty
properties
=
1
;
}
message
RebuildMemoPropertyRequest
{
message
RebuildMemoPropertyRequest
{
// The name of the memo.
// The name of the memo.
// Format: memos/{id}. Use "memos/-" to rebuild all memos.
// Format: memos/{id}. Use "memos/-" to rebuild all memos.
...
...
proto/gen/api/v1/memo_service.pb.go
View file @
e0600388
This source diff could not be displayed because it is too large. You can
view the blob
instead.
proto/gen/api/v1/memo_service.pb.gw.go
View file @
e0600388
...
@@ -359,6 +359,58 @@ func local_request_MemoService_ExportMemos_0(ctx context.Context, marshaler runt
...
@@ -359,6 +359,58 @@ func local_request_MemoService_ExportMemos_0(ctx context.Context, marshaler runt
}
}
func
request_MemoService_ListMemoProperties_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
MemoServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
protoReq
ListMemoPropertiesRequest
var
metadata
runtime
.
ServerMetadata
var
(
val
string
ok
bool
err
error
_
=
err
)
val
,
ok
=
pathParams
[
"name"
]
if
!
ok
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"missing parameter %s"
,
"name"
)
}
protoReq
.
Name
,
err
=
runtime
.
String
(
val
)
if
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"type mismatch, parameter: %s, error: %v"
,
"name"
,
err
)
}
msg
,
err
:=
client
.
ListMemoProperties
(
ctx
,
&
protoReq
,
grpc
.
Header
(
&
metadata
.
HeaderMD
),
grpc
.
Trailer
(
&
metadata
.
TrailerMD
))
return
msg
,
metadata
,
err
}
func
local_request_MemoService_ListMemoProperties_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
server
MemoServiceServer
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
protoReq
ListMemoPropertiesRequest
var
metadata
runtime
.
ServerMetadata
var
(
val
string
ok
bool
err
error
_
=
err
)
val
,
ok
=
pathParams
[
"name"
]
if
!
ok
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"missing parameter %s"
,
"name"
)
}
protoReq
.
Name
,
err
=
runtime
.
String
(
val
)
if
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"type mismatch, parameter: %s, error: %v"
,
"name"
,
err
)
}
msg
,
err
:=
server
.
ListMemoProperties
(
ctx
,
&
protoReq
)
return
msg
,
metadata
,
err
}
func
request_MemoService_RebuildMemoProperty_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
MemoServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
func
request_MemoService_RebuildMemoProperty_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
MemoServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
protoReq
RebuildMemoPropertyRequest
var
protoReq
RebuildMemoPropertyRequest
var
metadata
runtime
.
ServerMetadata
var
metadata
runtime
.
ServerMetadata
...
@@ -1356,6 +1408,31 @@ func RegisterMemoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
...
@@ -1356,6 +1408,31 @@ func RegisterMemoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
})
})
mux
.
Handle
(
"GET"
,
pattern_MemoService_ListMemoProperties_0
,
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
)
var
err
error
var
annotatedContext
context
.
Context
annotatedContext
,
err
=
runtime
.
AnnotateIncomingContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.MemoService/ListMemoProperties"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=memos/*}/properties"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
local_request_MemoService_ListMemoProperties_0
(
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_ListMemoProperties_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
"POST"
,
pattern_MemoService_RebuildMemoProperty_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
mux
.
Handle
(
"POST"
,
pattern_MemoService_RebuildMemoProperty_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
()
...
@@ -1364,7 +1441,7 @@ func RegisterMemoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
...
@@ -1364,7 +1441,7 @@ func RegisterMemoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
var
err
error
var
err
error
var
annotatedContext
context
.
Context
var
annotatedContext
context
.
Context
annotatedContext
,
err
=
runtime
.
AnnotateIncomingContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.MemoService/RebuildMemoProperty"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=memos/*}:rebuild"
))
annotatedContext
,
err
=
runtime
.
AnnotateIncomingContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.MemoService/RebuildMemoProperty"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=memos/*}
/properties
:rebuild"
))
if
err
!=
nil
{
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
return
...
@@ -1901,13 +1978,35 @@ func RegisterMemoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
...
@@ -1901,13 +1978,35 @@ func RegisterMemoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
})
})
mux
.
Handle
(
"GET"
,
pattern_MemoService_ListMemoProperties_0
,
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
)
var
err
error
var
annotatedContext
context
.
Context
annotatedContext
,
err
=
runtime
.
AnnotateContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.MemoService/ListMemoProperties"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=memos/*}/properties"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
request_MemoService_ListMemoProperties_0
(
annotatedContext
,
inboundMarshaler
,
client
,
req
,
pathParams
)
annotatedContext
=
runtime
.
NewServerMetadataContext
(
annotatedContext
,
md
)
if
err
!=
nil
{
runtime
.
HTTPError
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
forward_MemoService_ListMemoProperties_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
"POST"
,
pattern_MemoService_RebuildMemoProperty_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
mux
.
Handle
(
"POST"
,
pattern_MemoService_RebuildMemoProperty_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
()
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
var
err
error
var
err
error
var
annotatedContext
context
.
Context
var
annotatedContext
context
.
Context
annotatedContext
,
err
=
runtime
.
AnnotateContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.MemoService/RebuildMemoProperty"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=memos/*}:rebuild"
))
annotatedContext
,
err
=
runtime
.
AnnotateContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.MemoService/RebuildMemoProperty"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=memos/*}
/properties
:rebuild"
))
if
err
!=
nil
{
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
return
...
@@ -2227,7 +2326,9 @@ var (
...
@@ -2227,7 +2326,9 @@ var (
pattern_MemoService_ExportMemos_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v1"
,
"memos"
},
"export"
))
pattern_MemoService_ExportMemos_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v1"
,
"memos"
},
"export"
))
pattern_MemoService_RebuildMemoProperty_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
},
[]
string
{
"api"
,
"v1"
,
"memos"
,
"name"
},
"rebuild"
))
pattern_MemoService_ListMemoProperties_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
,
2
,
4
},
[]
string
{
"api"
,
"v1"
,
"memos"
,
"name"
,
"properties"
},
""
))
pattern_MemoService_RebuildMemoProperty_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
,
2
,
4
},
[]
string
{
"api"
,
"v1"
,
"memos"
,
"name"
,
"properties"
},
"rebuild"
))
pattern_MemoService_ListMemoTags_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
,
2
,
4
},
[]
string
{
"api"
,
"v1"
,
"memos"
,
"parent"
,
"tags"
},
""
))
pattern_MemoService_ListMemoTags_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
,
2
,
4
},
[]
string
{
"api"
,
"v1"
,
"memos"
,
"parent"
,
"tags"
},
""
))
...
@@ -2271,6 +2372,8 @@ var (
...
@@ -2271,6 +2372,8 @@ var (
forward_MemoService_ExportMemos_0
=
runtime
.
ForwardResponseMessage
forward_MemoService_ExportMemos_0
=
runtime
.
ForwardResponseMessage
forward_MemoService_ListMemoProperties_0
=
runtime
.
ForwardResponseMessage
forward_MemoService_RebuildMemoProperty_0
=
runtime
.
ForwardResponseMessage
forward_MemoService_RebuildMemoProperty_0
=
runtime
.
ForwardResponseMessage
forward_MemoService_ListMemoTags_0
=
runtime
.
ForwardResponseMessage
forward_MemoService_ListMemoTags_0
=
runtime
.
ForwardResponseMessage
...
...
proto/gen/api/v1/memo_service_grpc.pb.go
View file @
e0600388
...
@@ -27,6 +27,7 @@ const (
...
@@ -27,6 +27,7 @@ const (
MemoService_UpdateMemo_FullMethodName
=
"/memos.api.v1.MemoService/UpdateMemo"
MemoService_UpdateMemo_FullMethodName
=
"/memos.api.v1.MemoService/UpdateMemo"
MemoService_DeleteMemo_FullMethodName
=
"/memos.api.v1.MemoService/DeleteMemo"
MemoService_DeleteMemo_FullMethodName
=
"/memos.api.v1.MemoService/DeleteMemo"
MemoService_ExportMemos_FullMethodName
=
"/memos.api.v1.MemoService/ExportMemos"
MemoService_ExportMemos_FullMethodName
=
"/memos.api.v1.MemoService/ExportMemos"
MemoService_ListMemoProperties_FullMethodName
=
"/memos.api.v1.MemoService/ListMemoProperties"
MemoService_RebuildMemoProperty_FullMethodName
=
"/memos.api.v1.MemoService/RebuildMemoProperty"
MemoService_RebuildMemoProperty_FullMethodName
=
"/memos.api.v1.MemoService/RebuildMemoProperty"
MemoService_ListMemoTags_FullMethodName
=
"/memos.api.v1.MemoService/ListMemoTags"
MemoService_ListMemoTags_FullMethodName
=
"/memos.api.v1.MemoService/ListMemoTags"
MemoService_RenameMemoTag_FullMethodName
=
"/memos.api.v1.MemoService/RenameMemoTag"
MemoService_RenameMemoTag_FullMethodName
=
"/memos.api.v1.MemoService/RenameMemoTag"
...
@@ -61,6 +62,8 @@ type MemoServiceClient interface {
...
@@ -61,6 +62,8 @@ type MemoServiceClient interface {
DeleteMemo
(
ctx
context
.
Context
,
in
*
DeleteMemoRequest
,
opts
...
grpc
.
CallOption
)
(
*
emptypb
.
Empty
,
error
)
DeleteMemo
(
ctx
context
.
Context
,
in
*
DeleteMemoRequest
,
opts
...
grpc
.
CallOption
)
(
*
emptypb
.
Empty
,
error
)
// ExportMemos exports memos.
// ExportMemos exports memos.
ExportMemos
(
ctx
context
.
Context
,
in
*
ExportMemosRequest
,
opts
...
grpc
.
CallOption
)
(
*
ExportMemosResponse
,
error
)
ExportMemos
(
ctx
context
.
Context
,
in
*
ExportMemosRequest
,
opts
...
grpc
.
CallOption
)
(
*
ExportMemosResponse
,
error
)
// ListMemoProperties lists memo properties.
ListMemoProperties
(
ctx
context
.
Context
,
in
*
ListMemoPropertiesRequest
,
opts
...
grpc
.
CallOption
)
(
*
ListMemoPropertiesResponse
,
error
)
// RebuildMemoProperty rebuilds a memo property.
// RebuildMemoProperty rebuilds a memo property.
RebuildMemoProperty
(
ctx
context
.
Context
,
in
*
RebuildMemoPropertyRequest
,
opts
...
grpc
.
CallOption
)
(
*
emptypb
.
Empty
,
error
)
RebuildMemoProperty
(
ctx
context
.
Context
,
in
*
RebuildMemoPropertyRequest
,
opts
...
grpc
.
CallOption
)
(
*
emptypb
.
Empty
,
error
)
// ListMemoTags lists tags for a memo.
// ListMemoTags lists tags for a memo.
...
@@ -162,6 +165,15 @@ func (c *memoServiceClient) ExportMemos(ctx context.Context, in *ExportMemosRequ
...
@@ -162,6 +165,15 @@ func (c *memoServiceClient) ExportMemos(ctx context.Context, in *ExportMemosRequ
return
out
,
nil
return
out
,
nil
}
}
func
(
c
*
memoServiceClient
)
ListMemoProperties
(
ctx
context
.
Context
,
in
*
ListMemoPropertiesRequest
,
opts
...
grpc
.
CallOption
)
(
*
ListMemoPropertiesResponse
,
error
)
{
out
:=
new
(
ListMemoPropertiesResponse
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
MemoService_ListMemoProperties_FullMethodName
,
in
,
out
,
opts
...
)
if
err
!=
nil
{
return
nil
,
err
}
return
out
,
nil
}
func
(
c
*
memoServiceClient
)
RebuildMemoProperty
(
ctx
context
.
Context
,
in
*
RebuildMemoPropertyRequest
,
opts
...
grpc
.
CallOption
)
(
*
emptypb
.
Empty
,
error
)
{
func
(
c
*
memoServiceClient
)
RebuildMemoProperty
(
ctx
context
.
Context
,
in
*
RebuildMemoPropertyRequest
,
opts
...
grpc
.
CallOption
)
(
*
emptypb
.
Empty
,
error
)
{
out
:=
new
(
emptypb
.
Empty
)
out
:=
new
(
emptypb
.
Empty
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
MemoService_RebuildMemoProperty_FullMethodName
,
in
,
out
,
opts
...
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
MemoService_RebuildMemoProperty_FullMethodName
,
in
,
out
,
opts
...
)
...
@@ -306,6 +318,8 @@ type MemoServiceServer interface {
...
@@ -306,6 +318,8 @@ type MemoServiceServer interface {
DeleteMemo
(
context
.
Context
,
*
DeleteMemoRequest
)
(
*
emptypb
.
Empty
,
error
)
DeleteMemo
(
context
.
Context
,
*
DeleteMemoRequest
)
(
*
emptypb
.
Empty
,
error
)
// ExportMemos exports memos.
// ExportMemos exports memos.
ExportMemos
(
context
.
Context
,
*
ExportMemosRequest
)
(
*
ExportMemosResponse
,
error
)
ExportMemos
(
context
.
Context
,
*
ExportMemosRequest
)
(
*
ExportMemosResponse
,
error
)
// ListMemoProperties lists memo properties.
ListMemoProperties
(
context
.
Context
,
*
ListMemoPropertiesRequest
)
(
*
ListMemoPropertiesResponse
,
error
)
// RebuildMemoProperty rebuilds a memo property.
// RebuildMemoProperty rebuilds a memo property.
RebuildMemoProperty
(
context
.
Context
,
*
RebuildMemoPropertyRequest
)
(
*
emptypb
.
Empty
,
error
)
RebuildMemoProperty
(
context
.
Context
,
*
RebuildMemoPropertyRequest
)
(
*
emptypb
.
Empty
,
error
)
// ListMemoTags lists tags for a memo.
// ListMemoTags lists tags for a memo.
...
@@ -362,6 +376,9 @@ func (UnimplementedMemoServiceServer) DeleteMemo(context.Context, *DeleteMemoReq
...
@@ -362,6 +376,9 @@ func (UnimplementedMemoServiceServer) DeleteMemo(context.Context, *DeleteMemoReq
func
(
UnimplementedMemoServiceServer
)
ExportMemos
(
context
.
Context
,
*
ExportMemosRequest
)
(
*
ExportMemosResponse
,
error
)
{
func
(
UnimplementedMemoServiceServer
)
ExportMemos
(
context
.
Context
,
*
ExportMemosRequest
)
(
*
ExportMemosResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method ExportMemos not implemented"
)
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method ExportMemos not implemented"
)
}
}
func
(
UnimplementedMemoServiceServer
)
ListMemoProperties
(
context
.
Context
,
*
ListMemoPropertiesRequest
)
(
*
ListMemoPropertiesResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method ListMemoProperties not implemented"
)
}
func
(
UnimplementedMemoServiceServer
)
RebuildMemoProperty
(
context
.
Context
,
*
RebuildMemoPropertyRequest
)
(
*
emptypb
.
Empty
,
error
)
{
func
(
UnimplementedMemoServiceServer
)
RebuildMemoProperty
(
context
.
Context
,
*
RebuildMemoPropertyRequest
)
(
*
emptypb
.
Empty
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method RebuildMemoProperty not implemented"
)
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method RebuildMemoProperty not implemented"
)
}
}
...
@@ -543,6 +560,24 @@ func _MemoService_ExportMemos_Handler(srv interface{}, ctx context.Context, dec
...
@@ -543,6 +560,24 @@ func _MemoService_ExportMemos_Handler(srv interface{}, ctx context.Context, dec
return
interceptor
(
ctx
,
in
,
info
,
handler
)
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
}
func
_MemoService_ListMemoProperties_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
ListMemoPropertiesRequest
)
if
err
:=
dec
(
in
);
err
!=
nil
{
return
nil
,
err
}
if
interceptor
==
nil
{
return
srv
.
(
MemoServiceServer
)
.
ListMemoProperties
(
ctx
,
in
)
}
info
:=
&
grpc
.
UnaryServerInfo
{
Server
:
srv
,
FullMethod
:
MemoService_ListMemoProperties_FullMethodName
,
}
handler
:=
func
(
ctx
context
.
Context
,
req
interface
{})
(
interface
{},
error
)
{
return
srv
.
(
MemoServiceServer
)
.
ListMemoProperties
(
ctx
,
req
.
(
*
ListMemoPropertiesRequest
))
}
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
func
_MemoService_RebuildMemoProperty_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
func
_MemoService_RebuildMemoProperty_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
RebuildMemoPropertyRequest
)
in
:=
new
(
RebuildMemoPropertyRequest
)
if
err
:=
dec
(
in
);
err
!=
nil
{
if
err
:=
dec
(
in
);
err
!=
nil
{
...
@@ -830,6 +865,10 @@ var MemoService_ServiceDesc = grpc.ServiceDesc{
...
@@ -830,6 +865,10 @@ var MemoService_ServiceDesc = grpc.ServiceDesc{
MethodName
:
"ExportMemos"
,
MethodName
:
"ExportMemos"
,
Handler
:
_MemoService_ExportMemos_Handler
,
Handler
:
_MemoService_ExportMemos_Handler
,
},
},
{
MethodName
:
"ListMemoProperties"
,
Handler
:
_MemoService_ListMemoProperties_Handler
,
},
{
{
MethodName
:
"RebuildMemoProperty"
,
MethodName
:
"RebuildMemoProperty"
,
Handler
:
_MemoService_RebuildMemoProperty_Handler
,
Handler
:
_MemoService_RebuildMemoProperty_Handler
,
...
...
server/router/api/v1/memo_service.go
View file @
e0600388
...
@@ -777,7 +777,7 @@ func (s *APIV1Service) convertMemoFromStore(ctx context.Context, memo *store.Mem
...
@@ -777,7 +777,7 @@ func (s *APIV1Service) convertMemoFromStore(ctx context.Context, memo *store.Mem
return
nil
,
errors
.
Wrap
(
err
,
"failed to parse content"
)
return
nil
,
errors
.
Wrap
(
err
,
"failed to parse content"
)
}
}
return
&
v1pb
.
Memo
{
memoMessage
:=
&
v1pb
.
Memo
{
Name
:
name
,
Name
:
name
,
Uid
:
memo
.
UID
,
Uid
:
memo
.
UID
,
RowStatus
:
convertRowStatusFromStore
(
memo
.
RowStatus
),
RowStatus
:
convertRowStatusFromStore
(
memo
.
RowStatus
),
...
@@ -789,11 +789,29 @@ func (s *APIV1Service) convertMemoFromStore(ctx context.Context, memo *store.Mem
...
@@ -789,11 +789,29 @@ func (s *APIV1Service) convertMemoFromStore(ctx context.Context, memo *store.Mem
Nodes
:
convertFromASTNodes
(
nodes
),
Nodes
:
convertFromASTNodes
(
nodes
),
Visibility
:
convertVisibilityFromStore
(
memo
.
Visibility
),
Visibility
:
convertVisibilityFromStore
(
memo
.
Visibility
),
Pinned
:
memo
.
Pinned
,
Pinned
:
memo
.
Pinned
,
ParentId
:
memo
.
ParentID
,
Relations
:
listMemoRelationsResponse
.
Relations
,
Relations
:
listMemoRelationsResponse
.
Relations
,
Resources
:
listMemoResourcesResponse
.
Resources
,
Resources
:
listMemoResourcesResponse
.
Resources
,
Reactions
:
listMemoReactionsResponse
.
Reactions
,
Reactions
:
listMemoReactionsResponse
.
Reactions
,
},
nil
}
if
memo
.
Payload
!=
nil
{
memoMessage
.
Property
=
convertMemoPropertyFromStore
(
memo
.
Payload
.
Property
)
}
if
memo
.
ParentID
!=
nil
{
parent
:=
fmt
.
Sprintf
(
"%s%d"
,
MemoNamePrefix
,
*
memo
.
ParentID
)
memoMessage
.
Parent
=
&
parent
}
return
memoMessage
,
nil
}
func
convertMemoPropertyFromStore
(
property
*
storepb
.
MemoPayload_Property
)
*
v1pb
.
MemoProperty
{
if
property
==
nil
{
return
nil
}
return
&
v1pb
.
MemoProperty
{
Tags
:
property
.
Tags
,
HasLink
:
property
.
HasLink
,
HasTaskList
:
property
.
HasTaskList
,
}
}
}
func
convertVisibilityFromStore
(
visibility
store
.
Visibility
)
v1pb
.
Visibility
{
func
convertVisibilityFromStore
(
visibility
store
.
Visibility
)
v1pb
.
Visibility
{
...
...
web/src/pages/MemoDetail.tsx
View file @
e0600388
...
@@ -9,7 +9,7 @@ import MemoView from "@/components/MemoView";
...
@@ -9,7 +9,7 @@ import MemoView from "@/components/MemoView";
import
MobileHeader
from
"@/components/MobileHeader"
;
import
MobileHeader
from
"@/components/MobileHeader"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
import
useNavigateTo
from
"@/hooks/useNavigateTo"
;
import
{
MemoNamePrefix
,
useMemoStore
}
from
"@/store/v1"
;
import
{
useMemoStore
}
from
"@/store/v1"
;
import
{
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
Memo
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
...
@@ -46,8 +46,8 @@ const MemoDetail = () => {
...
@@ -46,8 +46,8 @@ const MemoDetail = () => {
}
}
(
async
()
=>
{
(
async
()
=>
{
if
(
memo
.
parent
Id
)
{
if
(
memo
.
parent
)
{
memoStore
.
getOrFetchMemoByName
(
`
${
MemoNamePrefix
}${
memo
.
parentId
}
`
).
then
((
memo
:
Memo
)
=>
{
memoStore
.
getOrFetchMemoByName
(
memo
.
parent
).
then
((
memo
:
Memo
)
=>
{
setParentMemo
(
memo
);
setParentMemo
(
memo
);
});
});
}
else
{
}
else
{
...
...
web/src/pages/Timeline.tsx
View file @
e0600388
...
@@ -160,25 +160,13 @@ const Timeline = () => {
...
@@ -160,25 +160,13 @@ const Timeline = () => {
</
div
>
</
div
>
<
div
className=
{
clsx
(
"w-full flex flex-col justify-start items-start"
)
}
>
<
div
className=
{
clsx
(
"w-full flex flex-col justify-start items-start"
)
}
>
{
sortedMemos
.
map
((
memo
,
index
)
=>
(
{
sortedMemos
.
map
((
memo
)
=>
(
<
div
key=
{
`${memo.name}-${memo.displayTime}`
}
className=
{
clsx
(
"relative w-full flex flex-col justify-start items-start pl-4 sm:pl-10 pt-0"
)
}
>
<
MemoView
<
MemoView
className=
"!border max-w-full !border-gray-100 dark:!border-zinc-700"
key=
{
`${memo.name}-${memo.displayTime}`
}
className=
"!border w-full !border-gray-100 dark:!border-zinc-700"
memo=
{
memo
}
memo=
{
memo
}
displayTimeFormat=
"time"
displayTimeFormat=
"time"
/>
/>
<
div
className=
"absolute -left-2 sm:left-2 top-4 h-full"
>
{
index
!==
sortedMemos
.
length
-
1
&&
(
<
div
className=
"absolute top-2 left-[7px] h-full w-0.5 bg-gray-200 dark:bg-gray-700 block"
></
div
>
)
}
<
div
className=
"border-4 rounded-full border-white relative dark:border-zinc-800"
>
<
Icon
.
Circle
className=
"w-2 h-auto bg-gray-200 text-gray-200 dark:bg-gray-700 dark:text-gray-700 rounded-full"
/>
</
div
>
</
div
>
</
div
>
))
}
))
}
</
div
>
</
div
>
</
div
>
</
div
>
...
...
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