102 lines
2.5 KiB
TypeScript
102 lines
2.5 KiB
TypeScript
import { makeRequest } from "@frontend/kitui";
|
||
import { parseAxiosError } from "@utils/parse-error";
|
||
|
||
export type LeadTargetType = "mail" | "telegram" | "whatsapp" | "webhook";
|
||
|
||
export interface LeadTargetModel {
|
||
ID: number;
|
||
AccountID: string;
|
||
Type: LeadTargetType;
|
||
QuizID: number;
|
||
Target: string;
|
||
InviteLink?: string;
|
||
Deleted?: boolean;
|
||
CreatedAt?: string;
|
||
}
|
||
|
||
const API_URL = `${process.env.REACT_APP_DOMAIN}/squiz`;
|
||
|
||
export const getLeadTargetsByQuiz = async (
|
||
quizId: number,
|
||
): Promise<[LeadTargetModel[] | null, string?]> => {
|
||
try {
|
||
const items = await makeRequest<unknown, LeadTargetModel[]>({
|
||
method: "GET",
|
||
url: `${API_URL}/account/leadtarget/${quizId}`,
|
||
});
|
||
|
||
return [items];
|
||
} catch (nativeError) {
|
||
const [error] = parseAxiosError(nativeError);
|
||
return [null, `Не удалось получить цели лида. ${error}`];
|
||
}
|
||
};
|
||
|
||
export const createLeadTarget = async (
|
||
body: {
|
||
type: LeadTargetType;
|
||
quizID: number;
|
||
target: string;
|
||
name?: string;
|
||
},
|
||
): Promise<[LeadTargetModel | true | null, string?]> => {
|
||
try {
|
||
const response = await makeRequest<typeof body, LeadTargetModel | true>({
|
||
method: "POST",
|
||
url: `${API_URL}/account/leadtarget`,
|
||
body,
|
||
});
|
||
|
||
return [response];
|
||
} catch (nativeError) {
|
||
const [error] = parseAxiosError(nativeError);
|
||
return [null, `Не удалось создать цель лида. ${error}`];
|
||
}
|
||
};
|
||
|
||
export const updateLeadTarget = async (
|
||
body: {
|
||
id: number;
|
||
target: string;
|
||
},
|
||
): Promise<[LeadTargetModel | null, string?]> => {
|
||
try {
|
||
const updated = await makeRequest<typeof body, LeadTargetModel>({
|
||
method: "PUT",
|
||
url: `${API_URL}/account/leadtarget`,
|
||
body,
|
||
});
|
||
|
||
return [updated];
|
||
} catch (nativeError) {
|
||
const [error] = parseAxiosError(nativeError);
|
||
return [null, `Не удалось обновить цель лида. ${error}`];
|
||
}
|
||
};
|
||
|
||
export const deleteLeadTarget = async (
|
||
id: number,
|
||
): Promise<[true | null, string?]> => {
|
||
try {
|
||
await makeRequest<unknown, unknown>({
|
||
method: "DELETE",
|
||
url: `${API_URL}/account/leadtarget/${id}`,
|
||
});
|
||
|
||
return [true];
|
||
} catch (nativeError) {
|
||
const [error] = parseAxiosError(nativeError);
|
||
return [null, `Не удалось удалить цель лида. ${error}`];
|
||
}
|
||
};
|
||
|
||
export const leadTargetApi = {
|
||
getByQuiz: getLeadTargetsByQuiz,
|
||
create: createLeadTarget,
|
||
update: updateLeadTarget,
|
||
delete: deleteLeadTarget,
|
||
};
|
||
|
||
|
||
|