import * as api from "../helpers/api"; import { createMemo, patchMemo, setMemos, setTags } from "../store/modules/memo"; import store from "../store"; import { getUserIdFromPath } from "./userService"; const convertResponseModelMemo = (memo: Memo): Memo => { return { ...memo, createdTs: memo.createdTs * 1000, updatedTs: memo.updatedTs * 1000, }; }; const memoService = { getState: () => { return store.getState().memo; }, fetchAllMemos: async () => { const { data } = (await api.getMemoList(getUserIdFromPath())).data; const memos = data.filter((m) => m.rowStatus !== "ARCHIVED").map((m) => convertResponseModelMemo(m)); store.dispatch(setMemos(memos)); return memos; }, fetchArchivedMemos: async () => { const { data } = (await api.getArchivedMemoList(getUserIdFromPath())).data; const archivedMemos = data.map((m) => { return convertResponseModelMemo(m); }); return archivedMemos; }, getMemoById: (memoId: MemoId) => { for (const m of memoService.getState().memos) { if (m.id === memoId) { return m; } } return null; }, updateTagsState: async () => { const { data } = (await api.getTagList(getUserIdFromPath())).data; store.dispatch(setTags(data)); }, getLinkedMemos: async (memoId: MemoId): Promise => { const { memos } = memoService.getState(); const regex = new RegExp(`[@(.+?)](${memoId})`); return memos.filter((m) => m.content.match(regex)); }, createMemo: async (memoCreate: MemoCreate) => { const { data } = (await api.createMemo(memoCreate)).data; const memo = convertResponseModelMemo(data); store.dispatch(createMemo(memo)); }, patchMemo: async (memoPatch: MemoPatch): Promise => { const { data } = (await api.patchMemo(memoPatch)).data; const memo = convertResponseModelMemo(data); store.dispatch(patchMemo(memo)); return memo; }, pinMemo: async (memoId: MemoId) => { await api.pinMemo(memoId); store.dispatch( patchMemo({ id: memoId, pinned: true, }) ); }, unpinMemo: async (memoId: MemoId) => { await api.unpinMemo(memoId); store.dispatch( patchMemo({ id: memoId, pinned: false, }) ); }, deleteMemoById: async (memoId: MemoId) => { await api.deleteMemo(memoId); }, }; export default memoService;