Commit 41976cb8 authored by johnnyjoy's avatar johnnyjoy

feat: update memo endpoints

parent c28516b3
...@@ -825,22 +825,16 @@ paths: ...@@ -825,22 +825,16 @@ paths:
type: string type: string
pinned: pinned:
type: boolean type: boolean
parentId:
type: integer
format: int32
readOnly: true
resources: resources:
type: array type: array
items: items:
type: object type: object
$ref: '#/definitions/v1Resource' $ref: '#/definitions/v1Resource'
readOnly: true
relations: relations:
type: array type: array
items: items:
type: object type: object
$ref: '#/definitions/v1MemoRelation' $ref: '#/definitions/v1MemoRelation'
readOnly: true
reactions: reactions:
type: array type: array
items: items:
...@@ -2260,6 +2254,16 @@ definitions: ...@@ -2260,6 +2254,16 @@ definitions:
type: string type: string
visibility: visibility:
$ref: '#/definitions/v1Visibility' $ref: '#/definitions/v1Visibility'
resources:
type: array
items:
type: object
$ref: '#/definitions/v1Resource'
relations:
type: array
items:
type: object
$ref: '#/definitions/v1MemoRelation'
v1CreateWebhookRequest: v1CreateWebhookRequest:
type: object type: object
properties: properties:
...@@ -2547,22 +2551,16 @@ definitions: ...@@ -2547,22 +2551,16 @@ definitions:
type: string type: string
pinned: pinned:
type: boolean type: boolean
parentId:
type: integer
format: int32
readOnly: true
resources: resources:
type: array type: array
items: items:
type: object type: object
$ref: '#/definitions/v1Resource' $ref: '#/definitions/v1Resource'
readOnly: true
relations: relations:
type: array type: array
items: items:
type: object type: object
$ref: '#/definitions/v1MemoRelation' $ref: '#/definitions/v1MemoRelation'
readOnly: true
reactions: reactions:
type: array type: array
items: items:
......
...@@ -174,14 +174,9 @@ message Memo { ...@@ -174,14 +174,9 @@ message Memo {
bool pinned = 12; bool pinned = 12;
optional int32 parent_id = 13 [ repeated Resource resources = 14;
deprecated = true,
(google.api.field_behavior) = OUTPUT_ONLY
];
repeated Resource resources = 14 [(google.api.field_behavior) = OUTPUT_ONLY]; repeated MemoRelation relations = 15;
repeated MemoRelation relations = 15 [(google.api.field_behavior) = OUTPUT_ONLY];
repeated Reaction reactions = 16 [(google.api.field_behavior) = OUTPUT_ONLY]; repeated Reaction reactions = 16 [(google.api.field_behavior) = OUTPUT_ONLY];
...@@ -207,6 +202,10 @@ message CreateMemoRequest { ...@@ -207,6 +202,10 @@ message CreateMemoRequest {
string content = 1; string content = 1;
Visibility visibility = 2; Visibility visibility = 2;
repeated Resource resources = 3;
repeated MemoRelation relations = 4;
} }
message ListMemosRequest { message ListMemosRequest {
......
This diff is collapsed.
...@@ -71,6 +71,24 @@ func (s *APIV1Service) CreateMemo(ctx context.Context, request *v1pb.CreateMemoR ...@@ -71,6 +71,24 @@ func (s *APIV1Service) CreateMemo(ctx context.Context, request *v1pb.CreateMemoR
if err != nil { if err != nil {
return nil, err return nil, err
} }
if len(request.Resources) > 0 {
_, err := s.SetMemoResources(ctx, &v1pb.SetMemoResourcesRequest{
Name: fmt.Sprintf("%s%d", MemoNamePrefix, memo.ID),
Resources: request.Resources,
})
if err != nil {
return nil, errors.Wrap(err, "failed to set memo resources")
}
}
if len(request.Relations) > 0 {
_, err := s.SetMemoRelations(ctx, &v1pb.SetMemoRelationsRequest{
Name: fmt.Sprintf("%s%d", MemoNamePrefix, memo.ID),
Relations: request.Relations,
})
if err != nil {
return nil, errors.Wrap(err, "failed to set memo relations")
}
}
memoMessage, err := s.convertMemoFromStore(ctx, memo) memoMessage, err := s.convertMemoFromStore(ctx, memo)
if err != nil { if err != nil {
...@@ -293,6 +311,22 @@ func (s *APIV1Service) UpdateMemo(ctx context.Context, request *v1pb.UpdateMemoR ...@@ -293,6 +311,22 @@ func (s *APIV1Service) UpdateMemo(ctx context.Context, request *v1pb.UpdateMemoR
}); err != nil { }); err != nil {
return nil, status.Errorf(codes.Internal, "failed to upsert memo organizer") return nil, status.Errorf(codes.Internal, "failed to upsert memo organizer")
} }
} else if path == "resources" {
_, err := s.SetMemoResources(ctx, &v1pb.SetMemoResourcesRequest{
Name: request.Memo.Name,
Resources: request.Memo.Resources,
})
if err != nil {
return nil, errors.Wrap(err, "failed to set memo resources")
}
} else if path == "relations" {
_, err := s.SetMemoRelations(ctx, &v1pb.SetMemoRelationsRequest{
Name: request.Memo.Name,
Relations: request.Memo.Relations,
})
if err != nil {
return nil, errors.Wrap(err, "failed to set memo relations")
}
} }
} }
...@@ -1145,8 +1179,8 @@ func getMemoContentSnippet(content string) (string, error) { ...@@ -1145,8 +1179,8 @@ func getMemoContentSnippet(content string) (string, error) {
} }
plainText := renderer.NewStringRenderer().Render(nodes) plainText := renderer.NewStringRenderer().Render(nodes)
if len(plainText) > 100 { if len(plainText) > 64 {
return substring(plainText, 100) + "...", nil return substring(plainText, 64) + "...", nil
} }
return plainText, nil return plainText, nil
} }
......
...@@ -303,15 +303,15 @@ const MemoEditor = (props: Props) => { ...@@ -303,15 +303,15 @@ const MemoEditor = (props: Props) => {
updateMask.push("display_time"); updateMask.push("display_time");
memoPatch.displayTime = displayTime; memoPatch.displayTime = displayTime;
} }
if (!isEqual(state.resourceList, prevMemo.resources)) {
updateMask.push("resources");
memoPatch.resources = state.resourceList;
}
if (!isEqual(state.relationList, prevMemo.relations)) {
updateMask.push("relations");
memoPatch.relations = state.relationList;
}
const memo = await memoStore.updateMemo(memoPatch, updateMask); const memo = await memoStore.updateMemo(memoPatch, updateMask);
await memoServiceClient.setMemoResources({
name: memo.name,
resources: state.resourceList,
});
await memoServiceClient.setMemoRelations({
name: memo.name,
relations: state.relationList,
});
await memoStore.getOrFetchMemoByName(memo.name, { skipCache: true }); await memoStore.getOrFetchMemoByName(memo.name, { skipCache: true });
if (onConfirm) { if (onConfirm) {
onConfirm(memo.name); onConfirm(memo.name);
...@@ -323,6 +323,8 @@ const MemoEditor = (props: Props) => { ...@@ -323,6 +323,8 @@ const MemoEditor = (props: Props) => {
? memoStore.createMemo({ ? memoStore.createMemo({
content, content,
visibility: state.memoVisibility, visibility: state.memoVisibility,
resources: state.resourceList,
relations: state.relationList,
}) })
: memoServiceClient : memoServiceClient
.createMemoComment({ .createMemoComment({
...@@ -330,18 +332,12 @@ const MemoEditor = (props: Props) => { ...@@ -330,18 +332,12 @@ const MemoEditor = (props: Props) => {
comment: { comment: {
content, content,
visibility: state.memoVisibility, visibility: state.memoVisibility,
resources: state.resourceList,
relations: state.relationList,
}, },
}) })
.then((memo) => memo); .then((memo) => memo);
const memo = await request; const memo = await request;
await memoServiceClient.setMemoResources({
name: memo.name,
resources: state.resourceList,
});
await memoServiceClient.setMemoRelations({
name: memo.name,
relations: state.relationList,
});
await memoStore.getOrFetchMemoByName(memo.name, { skipCache: true }); await memoStore.getOrFetchMemoByName(memo.name, { skipCache: true });
if (onConfirm) { if (onConfirm) {
onConfirm(memo.name); onConfirm(memo.name);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment