type ResponseType = { succeed: boolean; status: number; message: string; data: T; }; async function get(url: string): Promise> { const response = await fetch(url, { method: "GET", }); const resData = (await response.json()) as ResponseType; if (!resData.succeed) { throw resData; } return resData; } async function post(url: string, data?: BasicType): Promise> { const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(data), }); const resData = (await response.json()) as ResponseType; if (!resData.succeed) { throw resData; } return resData; } namespace api { export function getUserInfo() { return get("/api/user/me"); } export function signin(username: string, password: string) { return post("/api/user/signin", { username, password }); } export function signup(username: string, password: string) { return post("/api/user/signup", { username, password }); } export function signout() { return post("/api/user/signout"); } export function checkUsernameUsable(username: string) { return get("/api/user/checkusername?username=" + username); } export function checkPasswordValid(password: string) { return post("/api/user/checkpassword", { password }); } export function updateUserinfo(username?: string, password?: string, githubName?: string, wxUserId?: string) { return post("/api/user/update", { username, password, githubName, wxUserId, }); } export function getMyMemos() { return get("/api/memo/all"); } export function getMyDeletedMemos() { return get("/api/memo/deleted"); } export function createMemo(content: string) { return post("/api/memo/new", { content }); } export function getMemoById(id: string) { return get("/api/memo/?id=" + id); } export function hideMemo(memoId: string) { return post("/api/memo/hide", { memoId, }); } export function restoreMemo(memoId: string) { return post("/api/memo/restore", { memoId, }); } export function deleteMemo(memoId: string) { return post("/api/memo/delete", { memoId, }); } export function updateMemo(memoId: string, content: string) { return post("/api/memo/update", { memoId, content }); } export function getLinkedMemos(memoId: string) { return get("/api/memo/linked?memoId=" + memoId); } export function removeGithubName() { return post("/api/user/updategh", { githubName: "" }); } export function getMyQueries() { return get("/api/query/all"); } export function createQuery(title: string, querystring: string) { return post("/api/query/new", { title, querystring }); } export function updateQuery(queryId: string, title: string, querystring: string) { return post("/api/query/update", { queryId, title, querystring }); } export function deleteQueryById(queryId: string) { return post("/api/query/delete", { queryId }); } export function pinQuery(queryId: string) { return post("/api/query/pin", { queryId }); } export function unpinQuery(queryId: string) { return post("/api/query/unpin", { queryId }); } } export default api;