answer/ui/src/services/common.ts

248 lines
6.5 KiB
TypeScript

import qs from 'qs';
import useSWR from 'swr';
import request from '@/utils/request';
import type * as Type from '@/common/interface';
export const uploadImage = (params: { file: File; type: Type.UploadType }) => {
const form = new FormData();
form.append('source', String(params.type));
form.append('file', params.file);
return request.post('/answer/api/v1/file', form);
};
export const useQueryQuestionByTitle = (title) => {
return useSWR<Record<string, any>>(
title ? `/answer/api/v1/question/similar?title=${title}` : '',
request.instance.get,
);
};
export const useQueryTags = (params) => {
return useSWR<Type.ListResult>(
`/answer/api/v1/tags/page?${qs.stringify(params, {
skipNulls: true,
})}`,
request.instance.get,
);
};
export const useQueryRevisions = (object_id: string | undefined) => {
return useSWR<Record<string, any>>(
object_id ? `/answer/api/v1/revisions?object_id=${object_id}` : '',
request.instance.get,
);
};
export const useQueryComments = (params) => {
if (params.page === 0) {
params.query_cond = 'vote';
params.page = 1;
}
return useSWR<Type.ListResult>(
`/answer/api/v1/comment/page?${qs.stringify(params, {
skipNulls: true,
})}`,
request.instance.get,
);
};
export const updateComment = (params) => {
return request.put('/answer/api/v1/comment', params);
};
export const deleteComment = (id) => {
return request.delete('/answer/api/v1/comment', {
comment_id: id,
});
};
export const addComment = (params) => {
return request.post('/answer/api/v1/comment', params);
};
export const queryTags = (tag: string) => {
return request.get(`/answer/api/v1/question/tags?tag=${tag}`);
};
export const useQueryAnswerInfo = (id: string) => {
return useSWR<{
info;
question;
}>(`/answer/api/v1/answer/info?id=${id}`, request.instance.get);
};
export const modifyQuestion = (
params: Type.QuestionParams & { id: string; edit_summary: string },
) => {
return request.put(`/answer/api/v1/question`, params);
};
export const modifyAnswer = (params: Type.AnswerParams) => {
return request.put(`/answer/api/v1/answer`, params);
};
export const login = (params: Type.LoginReqParams) => {
return request.post<Type.UserInfoRes>(
'/answer/api/v1/user/login/email',
params,
);
};
export const register = (params: Type.RegisterReqParams) => {
return request.post<any>('/answer/api/v1/user/register/email', params);
};
export const logout = () => {
return request.get('/answer/api/v1/user/logout');
};
export const verifyEmail = (code: string) => {
return request.get(`/answer/api/v1/email/verify?code=${code}`);
};
export const resendEmail = (params?: Type.ImgCodeReq) => {
params = qs.parse(
qs.stringify(params, {
skipNulls: true,
}),
);
return request.post('/answer/api/v1/user/email/verification/send', {
...params,
});
};
/**
* @description get login userinfo
* @returns {UserInfo}
*/
export const getLoggedUserInfo = () => {
return request.get<Type.UserInfoRes>('/answer/api/v1/user/info');
};
export const modifyPassword = (params: Type.ModifyPasswordReq) => {
return request.put('/answer/api/v1/user/password', params);
};
export const modifyUserInfo = (params: Type.ModifyUserReq) => {
return request.put('/answer/api/v1/user/info', params);
};
export const resetPassword = (params: Type.PasswordResetReq) => {
return request.post('/answer/api/v1/user/password/reset', params);
};
export const replacementPassword = (params: { code: string; pass: string }) => {
return request.post('/answer/api/v1/user/password/replacement', params);
};
export const activateAccount = (code: string) => {
return request.post(`/answer/api/v1/user/email/verification`, { code });
};
export const checkImgCode = (params: Type.CheckImgReq) => {
return request.get<Type.ImgCodeRes>(
`/answer/api/v1/user/action/record?${qs.stringify(params)}`,
);
};
export const setNotice = (params: Type.SetNoticeReq) => {
return request.post('/answer/api/v1/user/notice/set', params);
};
export const saveQuestion = (params: Type.QuestionParams) => {
return request.post('/answer/api/v1/question', params);
};
export const questionDetail = (id: string) => {
return request.get<Type.QuestionDetailRes>(
`/answer/api/v1/question/info?id=${id}`,
);
};
export const getAnswers = (params: Type.AnswersReq) => {
const apiUrl = `/answer/api/v1/answer/page?${qs.stringify(params)}`;
return request.get<Type.ListResult<Type.AnswerItem>>(apiUrl);
};
export const postAnswer = (params: Type.PostAnswerReq) => {
return request.post('/answer/api/v1/answer', params);
};
export const bookmark = (params: { group_id: string; object_id: string }) => {
return request.post('/answer/api/v1/collection/switch', params);
};
export const postVote = (
params: { object_id: string; is_cancel: boolean },
type: 'down' | 'up',
) => {
return request.post(`/answer/api/v1/vote/${type}`, params);
};
export const following = (params: {
object_id: string;
is_cancel: boolean;
}) => {
return request.post<{ follows: number; is_followed: boolean }>(
'/answer/api/v1/follow',
params,
);
};
export const acceptanceAnswer = (params: {
answer_id?: string;
question_id: string;
}) => {
return request.post('/answer/api/v1/answer/acceptance', params);
};
export const reportList = ({
type,
action,
isBackend = false,
}: Type.ReportParams & { isBackend }) => {
let api = '/answer/api/v1/reasons';
if (isBackend) {
api = '/answer/admin/api/reasons';
}
return request.get(`${api}?object_type=${type}&action=${action}`);
};
export const postReport = (params: {
source: Type.ReportType;
content: string;
object_id: string;
report_type: number;
}) => {
return request.post('/answer/api/v1/report', params);
};
export const deleteQuestion = (params: { id: string }) => {
return request.delete('/answer/api/v1/question', params);
};
export const deleteAnswer = (params: { id: string }) => {
return request.delete('/answer/api/v1/answer', params);
};
export const closeQuestion = (params: {
id: string;
close_msg?: string;
close_type: number;
}) => {
return request.put('/answer/api/v1/question/status', params);
};
export const changeEmail = (params: { e_mail: string }) => {
return request.post('/answer/api/v1/user/email/change/code', params);
};
export const changeEmailVerify = (params: { code: string }) => {
return request.put('/answer/api/v1/user/email', params);
};
export const getAppSettings = () => {
return request.get<Type.SiteSettings>('/answer/api/v1/siteinfo');
};