mirror of
https://github.com/usememos/memos.git
synced 2024-12-20 09:41:58 +03:00
feat: create memo with resourceIdList
This commit is contained in:
parent
9f8c0ce567
commit
ae8f292306
@ -50,6 +50,9 @@ type MemoCreate struct {
|
|||||||
// Domain specific fields
|
// Domain specific fields
|
||||||
Visibility Visibility `json:"visibility"`
|
Visibility Visibility `json:"visibility"`
|
||||||
Content string `json:"content"`
|
Content string `json:"content"`
|
||||||
|
|
||||||
|
// Related fields
|
||||||
|
ResourceIDList []int `json:"resourceIdList"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MemoPatch struct {
|
type MemoPatch struct {
|
||||||
|
@ -56,6 +56,20 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
|
|||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to create memo").SetInternal(err)
|
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to create memo").SetInternal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, resourceID := range memoCreate.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)
|
c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8)
|
||||||
if err := json.NewEncoder(c.Response().Writer).Encode(composeResponse(memo)); err != nil {
|
if err := json.NewEncoder(c.Response().Writer).Encode(composeResponse(memo)); err != nil {
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to encode memo response").SetInternal(err)
|
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to encode memo response").SetInternal(err)
|
||||||
|
@ -44,9 +44,7 @@ func (raw *memoRaw) toMemo() *api.Memo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Store) composeMemo(ctx context.Context, raw *memoRaw) (*api.Memo, error) {
|
func (s *Store) ComposeMemo(ctx context.Context, memo *api.Memo) (*api.Memo, error) {
|
||||||
memo := raw.toMemo()
|
|
||||||
|
|
||||||
memoOrganizer, err := s.FindMemoOrganizer(ctx, &api.MemoOrganizerFind{
|
memoOrganizer, err := s.FindMemoOrganizer(ctx, &api.MemoOrganizerFind{
|
||||||
MemoID: memo.ID,
|
MemoID: memo.ID,
|
||||||
UserID: memo.CreatorID,
|
UserID: memo.CreatorID,
|
||||||
@ -87,7 +85,7 @@ func (s *Store) CreateMemo(ctx context.Context, create *api.MemoCreate) (*api.Me
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
memo, err := s.composeMemo(ctx, memoRaw)
|
memo, err := s.ComposeMemo(ctx, memoRaw.toMemo())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -115,7 +113,7 @@ func (s *Store) PatchMemo(ctx context.Context, patch *api.MemoPatch) (*api.Memo,
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
memo, err := s.composeMemo(ctx, memoRaw)
|
memo, err := s.ComposeMemo(ctx, memoRaw.toMemo())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -137,7 +135,7 @@ func (s *Store) FindMemoList(ctx context.Context, find *api.MemoFind) ([]*api.Me
|
|||||||
|
|
||||||
list := []*api.Memo{}
|
list := []*api.Memo{}
|
||||||
for _, raw := range memoRawList {
|
for _, raw := range memoRawList {
|
||||||
memo, err := s.composeMemo(ctx, raw)
|
memo, err := s.ComposeMemo(ctx, raw.toMemo())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -156,7 +154,7 @@ func (s *Store) FindMemo(ctx context.Context, find *api.MemoFind) (*api.Memo, er
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if has {
|
if has {
|
||||||
memo, err := s.composeMemo(ctx, memoRaw)
|
memo, err := s.ComposeMemo(ctx, memoRaw.toMemo())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -184,7 +182,7 @@ func (s *Store) FindMemo(ctx context.Context, find *api.MemoFind) (*api.Memo, er
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
memo, err := s.composeMemo(ctx, memoRaw)
|
memo, err := s.ComposeMemo(ctx, memoRaw.toMemo())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -134,12 +134,10 @@ const MemoEditor: React.FC = () => {
|
|||||||
}
|
}
|
||||||
editorStateService.clearEditMemo();
|
editorStateService.clearEditMemo();
|
||||||
} else {
|
} else {
|
||||||
const memo = await memoService.createMemo({
|
await memoService.createMemo({
|
||||||
content,
|
content,
|
||||||
|
resourceIdList: state.resourceList.map((resource) => resource.id),
|
||||||
});
|
});
|
||||||
for (const resource of state.resourceList) {
|
|
||||||
await upsertMemoResource(memo.id, resource.id);
|
|
||||||
}
|
|
||||||
locationService.clearQuery();
|
locationService.clearQuery();
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
|
@ -30,12 +30,14 @@ const memoService = {
|
|||||||
const timeoutIndex = setTimeout(() => {
|
const timeoutIndex = setTimeout(() => {
|
||||||
store.dispatch(setIsFetching(true));
|
store.dispatch(setIsFetching(true));
|
||||||
}, 1000);
|
}, 1000);
|
||||||
const memoFind: MemoFind = {};
|
const memoFind: MemoFind = {
|
||||||
|
rowStatus: "NORMAL",
|
||||||
|
};
|
||||||
if (userService.isVisitorMode()) {
|
if (userService.isVisitorMode()) {
|
||||||
memoFind.creatorId = userService.getUserIdFromPath();
|
memoFind.creatorId = userService.getUserIdFromPath();
|
||||||
}
|
}
|
||||||
const { data } = (await api.getMemoList(memoFind)).data;
|
const { data } = (await api.getMemoList(memoFind)).data;
|
||||||
const memos = data.filter((m) => m.rowStatus !== "ARCHIVED").map((m) => convertResponseModelMemo(m));
|
const memos = data.map((m) => convertResponseModelMemo(m));
|
||||||
store.dispatch(setMemos(memos));
|
store.dispatch(setMemos(memos));
|
||||||
clearTimeout(timeoutIndex);
|
clearTimeout(timeoutIndex);
|
||||||
store.dispatch(setIsFetching(false));
|
store.dispatch(setIsFetching(false));
|
||||||
@ -60,6 +62,7 @@ const memoService = {
|
|||||||
fetchMemoById: async (memoId: MemoId) => {
|
fetchMemoById: async (memoId: MemoId) => {
|
||||||
const { data } = (await api.getMemoById(memoId)).data;
|
const { data } = (await api.getMemoById(memoId)).data;
|
||||||
const memo = convertResponseModelMemo(data);
|
const memo = convertResponseModelMemo(data);
|
||||||
|
store.dispatch(patchMemo(memo));
|
||||||
|
|
||||||
return memo;
|
return memo;
|
||||||
},
|
},
|
||||||
|
1
web/src/types/modules/memo.d.ts
vendored
1
web/src/types/modules/memo.d.ts
vendored
@ -20,6 +20,7 @@ interface Memo {
|
|||||||
|
|
||||||
interface MemoCreate {
|
interface MemoCreate {
|
||||||
content: string;
|
content: string;
|
||||||
|
resourceIdList: ResourceId[];
|
||||||
visibility?: Visibility;
|
visibility?: Visibility;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user