diff --git a/api/memo.go b/api/memo.go index 0fff6cd7..f9f8a346 100644 --- a/api/memo.go +++ b/api/memo.go @@ -67,6 +67,9 @@ type MemoPatch struct { // Domain specific fields Content *string `json:"content"` Visibility *Visibility `json:"visibility"` + + // Related fields + ResourceIDList []int `json:"resourceIdList"` } type MemoFind struct { diff --git a/server/memo.go b/server/memo.go index ebafa03b..dc24a071 100644 --- a/server/memo.go +++ b/server/memo.go @@ -116,6 +116,20 @@ func (s *Server) registerMemoRoutes(g *echo.Group) { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to patch memo").SetInternal(err) } + for _, resourceID := range memoPatch.ResourceIDList { + if _, err := s.Store.UpsertMemoResource(ctx, &api.MemoResourceUpsert{ + MemoID: memo.ID, + ResourceID: resourceID, + }); err != nil { + return echo.NewHTTPError(http.StatusInternalServerError, "Failed to upsert memo resource").SetInternal(err) + } + } + + memo, err = s.Store.ComposeMemo(ctx, memo) + if err != nil { + return echo.NewHTTPError(http.StatusInternalServerError, "Failed to compose memo").SetInternal(err) + } + c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8) if err := json.NewEncoder(c.Response().Writer).Encode(composeResponse(memo)); err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to encode memo response").SetInternal(err) diff --git a/web/src/components/MemoEditor.tsx b/web/src/components/MemoEditor.tsx index d4c9e99d..e10c28bd 100644 --- a/web/src/components/MemoEditor.tsx +++ b/web/src/components/MemoEditor.tsx @@ -164,6 +164,7 @@ const MemoEditor: React.FC = () => { await memoService.patchMemo({ id: prevMemo.id, content, + resourceIdList: state.resourceList.map((resource) => resource.id), }); } editorStateService.clearEditMemo(); diff --git a/web/src/types/modules/memo.d.ts b/web/src/types/modules/memo.d.ts index 180509c3..ac7c4dc0 100644 --- a/web/src/types/modules/memo.d.ts +++ b/web/src/types/modules/memo.d.ts @@ -30,6 +30,7 @@ interface MemoPatch { createdTs?: TimeStamp; rowStatus?: RowStatus; content?: string; + resourceIdList?: ResourceId[]; visibility?: Visibility; }