feat: request types

This commit is contained in:
IlyaDoronin 2024-05-16 16:40:52 +03:00
parent 4e4565813a
commit 2dab3aebe5
11 changed files with 83 additions and 50 deletions

@ -1,5 +1,5 @@
import type { SuspenseProps } from "react";
import { lazy, Suspense, useEffect, useLayoutEffect, useRef } from "react";
import { lazy, Suspense } from "react";
import { lazily } from "react-lazily";
import ContactFormModal from "@ui_kit/ContactForm";
import dayjs from "dayjs";
@ -22,7 +22,6 @@ import {
UserAccount,
useUserFetcher,
} from "@frontend/kitui";
import { makeRequest } from "@api/makeRequest";
import type { OriginalUserAccount } from "@root/user";
import {
clearUserData,

@ -1,12 +1,17 @@
import { makeRequest } from "@api/makeRequest";
import { parseAxiosError } from "@utils/parse-error";
import type {
LoginRequest,
LoginResponse,
RegisterRequest,
RegisterResponse,
} from "@frontend/kitui";
import { parseAxiosError } from "../utils/parse-error";
type RecoverResponse = {
message: string;
};
const API_URL = `${process.env.REACT_APP_DOMAIN}/auth`;
@ -54,7 +59,7 @@ export const login = async (
}
};
export const logout = async (): Promise<[unknown, string?]> => {
export const logout = async (): Promise<[void | null, string?]> => {
try {
const logoutResponse = await makeRequest<never, void>({
method: "POST",
@ -73,7 +78,7 @@ export const logout = async (): Promise<[unknown, string?]> => {
export const recover = async (
email: string,
): Promise<[unknown | null, string?]> => {
): Promise<[RecoverResponse | null, string?]> => {
try {
const formData = new FormData();
formData.append("email", email);
@ -82,7 +87,7 @@ export const recover = async (
`${process.env.REACT_APP_DOMAIN}/changepwd`,
);
const recoverResponse = await makeRequest<unknown, unknown>({
const recoverResponse = await makeRequest<FormData, RecoverResponse>({
url: `${process.env.REACT_APP_DOMAIN}/codeword/recover`,
body: formData,
useToken: false,

@ -1,8 +1,9 @@
import { UserAccount } from "@frontend/kitui";
import { makeRequest } from "@api/makeRequest";
import { parseAxiosError } from "@utils/parse-error";
import type { UserAccount } from "@frontend/kitui";
const API_URL = `${process.env.REACT_APP_DOMAIN}/customer/cart`;
const payCart = async (): Promise<[UserAccount | null, string?]> => {
@ -21,9 +22,11 @@ const payCart = async (): Promise<[UserAccount | null, string?]> => {
}
};
const addCartItem = async (id: string): Promise<[unknown | null, string?]> => {
const addCartItem = async (
id: string,
): Promise<[UserAccount | null, string?]> => {
try {
const addedItem = await makeRequest<never, unknown>({
const addedItem = await makeRequest<never, UserAccount>({
method: "PATCH",
url: `${API_URL}?id=${id}`,
});
@ -38,9 +41,9 @@ const addCartItem = async (id: string): Promise<[unknown | null, string?]> => {
const deleteCartItem = async (
id: string,
): Promise<[unknown | null, string?]> => {
): Promise<[UserAccount | null, string?]> => {
try {
const deletedItem = await makeRequest<never, unknown>({
const deletedItem = await makeRequest<never, UserAccount>({
method: "DELETE",
url: `${API_URL}?id=${id}`,
});

@ -1,4 +1,5 @@
import { makeRequest } from "@frontend/kitui";
import { parseAxiosError } from "@utils/parse-error";
import type { Discount } from "@model/discounts";
@ -9,12 +10,10 @@ export const getDiscounts = async (
userId: string,
): Promise<[Discount[] | null, string?]> => {
try {
const { Discounts } = await makeRequest<unknown, { Discounts: Discount[] }>(
{
method: "GET",
url: `${API_URL}/user/${userId}`,
},
);
const { Discounts } = await makeRequest<never, { Discounts: Discount[] }>({
method: "GET",
url: `${API_URL}/user/${userId}`,
});
return [Discounts];
} catch (nativeError) {

@ -1,10 +1,11 @@
import * as KIT from "@frontend/kitui";
import { Method, ResponseType, AxiosError } from "axios";
import { redirect } from "react-router-dom";
import { clearAuthToken } from "@frontend/kitui";
import { cleanAuthTicketData } from "@root/ticket";
import { clearUserData } from "@root/user";
import { clearQuizData } from "@root/quizes/store";
import { redirect } from "react-router-dom";
import type { AxiosResponse } from "axios";

@ -1,24 +1,26 @@
import { makeRequest } from "@api/makeRequest";
import { CreateQuestionRequest } from "model/question/create";
import { RawQuestion } from "model/question/question";
import {
import { replaceSpacesToEmptyLines } from "@utils/replaceSpacesToEmptyLines";
import { parseAxiosError } from "@utils/parse-error";
import type { CreateQuestionRequest } from "model/question/create";
import type { RawQuestion } from "model/question/question";
import type {
GetQuestionListRequest,
GetQuestionListResponse,
} from "@model/question/getList";
import {
import type {
EditQuestionRequest,
EditQuestionResponse,
} from "@model/question/edit";
import {
import type {
DeleteQuestionRequest,
DeleteQuestionResponse,
} from "@model/question/delete";
import {
import type {
CopyQuestionRequest,
CopyQuestionResponse,
} from "@model/question/copy";
import { replaceSpacesToEmptyLines } from "../utils/replaceSpacesToEmptyLines";
import { parseAxiosError } from "@utils/parse-error";
const API_URL = `${process.env.REACT_APP_DOMAIN}/squiz`;

@ -1,14 +1,19 @@
import { makeRequest } from "@api/makeRequest";
import { defaultQuizConfig } from "@model/quizSettings";
import { CopyQuizRequest, CopyQuizResponse } from "model/quiz/copy";
import { CreateQuizRequest } from "model/quiz/create";
import { DeleteQuizRequest, DeleteQuizResponse } from "model/quiz/delete";
import { EditQuizRequest, EditQuizResponse } from "model/quiz/edit";
import { GetQuizRequest, GetQuizResponse } from "model/quiz/get";
import { GetQuizListRequest, GetQuizListResponse } from "model/quiz/getList";
import { RawQuiz } from "model/quiz/quiz";
import { parseAxiosError } from "@utils/parse-error";
import type { RawQuiz } from "model/quiz/quiz";
import type { CopyQuizRequest, CopyQuizResponse } from "model/quiz/copy";
import type { CreateQuizRequest } from "model/quiz/create";
import type { DeleteQuizRequest, DeleteQuizResponse } from "model/quiz/delete";
import type { EditQuizRequest, EditQuizResponse } from "model/quiz/edit";
import type { GetQuizRequest, GetQuizResponse } from "model/quiz/get";
import type {
GetQuizListRequest,
GetQuizListResponse,
} from "model/quiz/getList";
type AddedQuizImagesResponse = {
[key: string]: string;
};

@ -1,8 +1,9 @@
import { makeRequest } from "@api/makeRequest";
import { RawResult } from "@model/result/result";
import { parseAxiosError } from "@utils/parse-error";
import type { RawResult } from "@model/result/result";
interface IResultListBody {
to: number;
from: string;
@ -37,6 +38,10 @@ type ResultFilter = {
to?: string;
};
type ObsolescenceRequest = {
answers: number[];
};
const API_URL = `${process.env.REACT_APP_DOMAIN}/squiz`;
const getResultList = async (
@ -61,9 +66,9 @@ const getResultList = async (
const deleteResult = async (
resultId: number,
): Promise<[unknown | null, string?]> => {
): Promise<[string | null, string?]> => {
try {
const deletedResult = await makeRequest<unknown, unknown>({
const deletedResult = await makeRequest<void, string>({
method: "DELETE",
url: `${API_URL}/results/delete/${resultId}`,
body: {},
@ -79,9 +84,9 @@ const deleteResult = async (
const obsolescenceResult = async (
idResultArray: number[],
): Promise<[unknown | null, string?]> => {
): Promise<[null, string?]> => {
try {
const obsolescencedResult = await makeRequest<unknown, unknown>({
const obsolescencedResult = await makeRequest<ObsolescenceRequest, null>({
method: "PATCH",
url: `${API_URL}/result/seen`,
body: { answers: idResultArray },
@ -99,7 +104,7 @@ const getAnswerResultList = async (
resultId: number,
): Promise<[IAnswerResult[] | null, string?]> => {
try {
const answerResultList = await makeRequest<unknown, IAnswerResult[]>({
const answerResultList = await makeRequest<never, IAnswerResult[]>({
method: "GET",
url: `${API_URL}/result/${resultId}`,
});
@ -115,12 +120,12 @@ const getAnswerResultList = async (
const AnswerResultListEx = async (
quizId: number,
body: ResultFilter,
): Promise<[unknown | null, string?]> => {
): Promise<[Blob | null, string?]> => {
try {
const answerResultListEx = await makeRequest<unknown, unknown>({
const answerResultListEx = await makeRequest<ResultFilter, Blob>({
method: "POST",
url: `${API_URL}/results/${quizId}/export`,
body: body,
body,
responseType: "blob",
});

@ -1,10 +1,17 @@
import { makeRequest } from "@api/makeRequest";
import { createTicket as createTicketRequest } from "@frontend/kitui";
import { parseAxiosError } from "../utils/parse-error";
import { SendTicketMessageRequest } from "@frontend/kitui";
import { makeRequest } from "@api/makeRequest";
import type { CreateTicketResponse } from "@frontend/kitui";
import { parseAxiosError } from "@utils/parse-error";
import type {
SendTicketMessageRequest,
CreateTicketResponse,
} from "@frontend/kitui";
type SendFileResponse = {
message: string;
};
const API_URL = `${process.env.REACT_APP_DOMAIN}/heruvym`;
@ -51,14 +58,14 @@ export const shownMessage = async (id: string): Promise<[null, string?]> => {
export const sendFile = async (
ticketId: string,
file: File,
): Promise<[unknown | null, string?]> => {
): Promise<[SendFileResponse | null, string?]> => {
try {
const body = new FormData();
body.append(file.name, file);
body.append("ticket", ticketId);
const sendResponse = await makeRequest<FormData, unknown>({
const sendResponse = await makeRequest<FormData, SendFileResponse>({
method: "POST",
url: `${process.env.REACT_APP_DOMAIN}/heruvym/sendFiles`,
body,

@ -5,6 +5,10 @@ import { parseAxiosError } from "@utils/parse-error";
import type { UserAccount } from "@frontend/kitui";
import type { OriginalUserAccount } from "@root/user";
type RecoverUserRequest = {
password: string;
};
export const getUser = async (): Promise<[UserAccount | null, string?]> => {
try {
const user = await makeRequest<never, UserAccount>({
@ -47,7 +51,7 @@ export const recoverUser = async (
password: string,
): Promise<[unknown | null, string?]> => {
try {
const recoverResponse = await makeRequest<{ password: string }, unknown>({
const recoverResponse = await makeRequest<RecoverUserRequest, unknown>({
url: `${process.env.REACT_APP_DOMAIN}/user`,
method: "PATCH",
body: { password },

@ -4,7 +4,6 @@ import {
useTicketMessages,
useTicketsFetcher,
} from "@frontend/kitui";
import { makeRequest } from "@api/makeRequest";
import FloatingSupportChat from "./FloatingSupportChat";
import { useUserStore } from "@root/user";
import { useCallback, useEffect, useMemo, useState } from "react";
@ -137,6 +136,10 @@ export default () => {
addOrUpdateUnauthMessages(messages);
}, []),
onError: useCallback((error: Error) => {
if (error.name === "CanceledError") {
return;
}
const [message] = parseAxiosError(error);
if (message) enqueueSnackbar(message);
}, []),