adminFront/src/api/promocode/requests.ts

175 lines
4.4 KiB
TypeScript
Raw Normal View History

import makeRequest from "@root/api/makeRequest";
2024-03-26 15:41:22 +00:00
import type {
2024-05-21 08:53:09 +00:00
CreatePromocodeBody,
EditPromocodeBody,
2024-03-26 15:41:22 +00:00
GetPromocodeListBody,
Promocode,
PromocodeList,
PromocodeStatistics,
} from "@root/model/promocodes";
import { parseAxiosError } from "@root/utils/parse-error";
2024-03-22 10:27:15 +00:00
import { isAxiosError } from "axios";
const baseUrl = process.env.REACT_APP_DOMAIN + "/codeword/promocode";
2024-03-03 13:30:57 +00:00
const getPromocodeList = async (body: GetPromocodeListBody) => {
2024-05-21 07:41:31 +00:00
try {
const promocodeListResponse = await makeRequest<GetPromocodeListBody, PromocodeList>({
url: baseUrl + "/getList",
method: "POST",
body,
useToken: false,
});
return promocodeListResponse;
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
throw new Error(`Ошибка при получении списка промокодов. ${error}`);
}
};
const createFastlink = async (id: string) => {
2024-05-21 07:41:31 +00:00
try {
return await makeRequest<{ id: string }, { fastlink: string }>({
url: baseUrl + "/fastlink",
method: "POST",
body: { id },
});
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
throw new Error(`Ошибка при создании фастлинка. ${error}`);
}
};
2024-03-27 17:31:51 +00:00
export const getAllPromocodes = async () => {
2024-05-21 07:41:31 +00:00
try {
const promocodes: Promocode[] = [];
let page = 0;
while (true) {
const promocodeList = await getPromocodeList({
limit: 100,
filter: {
active: true,
},
page,
});
if (promocodeList.items.length === 0) break;
promocodes.push(...promocodeList.items);
page++;
}
return promocodes;
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
throw new Error(`Ошибка при получении списка промокодов. ${error}`);
}
2024-03-27 17:31:51 +00:00
};
export const getNotActivePromocodes = async () => {
try {
const promocodes: Promocode[] = [];
let page = 0;
while (true) {
const promocodeList = await getPromocodeList({
limit: 100,
filter: {
active: false,
},
page,
});
if (promocodeList.items.length === 0) break;
promocodes.push(...promocodeList.items);
page++;
}
return promocodes;
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
throw new Error(`Ошибка при получении списка промокодов. ${error}`);
}
};
2024-03-03 13:30:57 +00:00
const createPromocode = async (body: CreatePromocodeBody) => {
2024-05-21 07:41:31 +00:00
try {
const createPromocodeResponse = await makeRequest<CreatePromocodeBody, Promocode>({
url: baseUrl + "/create",
method: "POST",
body,
useToken: false,
});
return createPromocodeResponse;
} catch (nativeError) {
if (isAxiosError(nativeError) && nativeError.response?.data.error === "Duplicate Codeword") {
throw new Error(`Промокод уже существует`);
}
const [error] = parseAxiosError(nativeError);
throw new Error(`Ошибка создания промокода. ${error}`);
}
};
const editPromocode = async (body: EditPromocodeBody) => {
try {
const editPromocodeResponse = await makeRequest<unknown, Promocode>({
url: process.env.REACT_APP_DOMAIN + "/codeword/promocode" + "/edit",
method: "PUT",
body,
});
2024-05-21 08:53:09 +00:00
return [editPromocodeResponse];
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
return [null, `Ошибка редактирования промокода. ${error}`];
}
2024-05-21 08:53:09 +00:00
};
const deletePromocode = async (id: string): Promise<void> => {
2024-05-21 07:41:31 +00:00
try {
await makeRequest<never, never>({
url: `${baseUrl}/${id}`,
method: "DELETE",
useToken: false,
});
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
throw new Error(`Ошибка удаления промокода. ${error}`);
}
2024-03-26 15:41:22 +00:00
};
2024-04-02 13:21:17 +00:00
const getPromocodeStatistics = async (id: string, from: number, to: number) => {
2024-05-21 07:41:31 +00:00
try {
const promocodeStatisticsResponse = await makeRequest<unknown, PromocodeStatistics>({
url: baseUrl + `/stats`,
body: {
id: id,
from: from,
to: to,
},
method: "POST",
useToken: false,
});
return promocodeStatisticsResponse;
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
throw new Error(`Ошибка при получении статистики промокода. ${error}`);
}
};
export const promocodeApi = {
2024-03-26 15:41:22 +00:00
getPromocodeList,
createPromocode,
editPromocode,
2024-03-26 15:41:22 +00:00
deletePromocode,
2024-03-28 14:08:38 +00:00
getAllPromocodes,
getNotActivePromocodes,
2024-03-26 15:41:22 +00:00
getPromocodeStatistics,
createFastlink,
};