front-hub/src/api/history.ts

129 lines
3.3 KiB
TypeScript
Raw Normal View History

2024-05-27 15:43:38 +00:00
import { Tariff } from "@frontend/kitui";
import { parseAxiosError } from "@root/utils/parse-error";
import makeRequest from "@api/makeRequest";
2023-09-12 21:45:18 +00:00
export interface GetHistoryResponse {
2024-05-27 15:43:38 +00:00
totalPages: number;
records: HistoryRecord[];
2023-09-12 21:45:18 +00:00
}
2023-11-10 14:51:50 +00:00
export type HistoryRecord = {
2024-05-27 15:43:38 +00:00
comment: string;
createdAt: string;
id: string;
isDeleted: boolean;
key: string;
rawDetails: [RawDetails, KeyValue];
updatedAt: string;
userId: string;
2023-09-15 21:00:02 +00:00
};
export interface GetHistoryResponse2 {
2024-05-27 15:43:38 +00:00
totalPages: number;
records: HistoryRecord2[];
}
export type HistoryRecord2 = {
2024-05-27 15:43:38 +00:00
comment: string;
createdAt: string;
id: string;
isDeleted: boolean;
key: string;
rawDetails: {
price: number;
tariffs: Tariff[];
};
updatedAt: string;
userId: string;
};
2024-04-22 08:37:17 +00:00
export type KeyValue = { Key: string; Value: string | number };
export type RawDetails = {
2024-05-27 15:43:38 +00:00
Key: "tariffs" | "price";
Value: string | number | KeyValue[][];
};
const API_URL = `${process.env.REACT_APP_DOMAIN}/customer`;
2024-05-27 15:43:38 +00:00
export async function getHistory(): Promise<
[GetHistoryResponse | GetHistoryResponse2 | null, string?]
> {
try {
const historyResponse = await makeRequest<
never,
GetHistoryResponse | GetHistoryResponse2
>({
url: `${API_URL}/history?page=1&limit=100&type=payCart`,
method: "GET",
useToken: true,
});
if (!Array.isArray(historyResponse.records[0]?.rawDetails)) {
return [historyResponse] as [GetHistoryResponse2];
}
const checked = historyResponse.records.map((data) => {
//const buffer:RawDetails[] = [];
/*(data.rawDetails as HistoryRecord["rawDetails"]).forEach((slot) => {
2024-04-22 08:37:17 +00:00
const index = regList[slot.Key]
buffer[index] = { ...slot }
})*/
2024-05-27 15:43:38 +00:00
//Чистим дыры с помощью .filter(() => true)
//@ts-ignore
//data.rawDetails = buffer
const checkedRowDetails = [
(data.rawDetails as HistoryRecord["rawDetails"]).find(
(details) => details.Key === "tariffs"
) as RawDetails,
(data.rawDetails as HistoryRecord["rawDetails"]).find(
(details) => details.Key === "price"
) as KeyValue,
];
return { ...data, rawDetails: checkedRowDetails } as HistoryRecord;
});
historyResponse.records = checked || [];
return [historyResponse];
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
return [null, `Не удалось получить историю. ${error}`];
}
2023-09-12 21:45:18 +00:00
}
2024-05-27 15:43:38 +00:00
export const sendReport = async (
id: string
): Promise<[unknown | null, string?]> => {
try {
const sendReportResponse = await makeRequest<{ id: string }, unknown>({
url: `${API_URL}/sendReport`,
method: "POST",
body: { id },
});
return [sendReportResponse];
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
return [[], `Не удалось отправить отчёт. ${error}`];
}
};
export const sendReportById = async (
tariffId: string
): Promise<[unknown | null, string?]> => {
try {
const sendReportResponse = await makeRequest<never, unknown>({
url: `${API_URL}/sendReport/${tariffId}`,
method: "POST",
});
return [sendReportResponse];
} catch (nativeError) {
const [error] = parseAxiosError(nativeError);
return [[], `Не удалось отправить отчёт. ${error}`];
}
};