62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
// lib/api.ts
|
||
// Общая логика отправки данных калькулятора на backend
|
||
|
||
import { API_BASE_URL } from './config';
|
||
|
||
export interface SubmitResponse {
|
||
success: boolean;
|
||
error?: string;
|
||
}
|
||
|
||
/**
|
||
* Отправляет данные калькулятора на backend
|
||
* @param calculatorType - Тип калькулятора (например, 'soap')
|
||
* @param chatId - ID чата Telegram
|
||
* @param formData - Данные формы
|
||
* @param photoFile - Файл фото (опционально)
|
||
* @returns Promise с результатом отправки
|
||
*/
|
||
export async function submitCalculator(
|
||
calculatorType: string,
|
||
chatId: string,
|
||
formData: Record<string, string | number>,
|
||
photoFile: File | null = null
|
||
): Promise<SubmitResponse> {
|
||
const data = new FormData();
|
||
|
||
data.append('chat_id', chatId);
|
||
|
||
// Добавляем все поля формы
|
||
for (const [key, value] of Object.entries(formData)) {
|
||
data.append(key, value.toString());
|
||
}
|
||
|
||
// Добавляем фото, если есть
|
||
if (photoFile) {
|
||
data.append('photo', photoFile);
|
||
}
|
||
|
||
try {
|
||
const res = await fetch(`${API_BASE_URL}/api/submit/${calculatorType}`, {
|
||
method: 'POST',
|
||
body: data,
|
||
});
|
||
|
||
if (res.ok) {
|
||
return { success: true };
|
||
} else {
|
||
const errorData = await res.json().catch(() => ({ error: await res.text() }));
|
||
return {
|
||
success: false,
|
||
error: errorData.error || `Ошибка ${res.status}: ${res.statusText}`,
|
||
};
|
||
}
|
||
} catch (err) {
|
||
return {
|
||
success: false,
|
||
error: err instanceof Error ? err.message : 'Ошибка сети при отправке расчёта',
|
||
};
|
||
}
|
||
}
|
||
|