DoSoapCalc/frontend/lib/api.ts

62 lines
1.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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 : 'Ошибка сети при отправке расчёта',
};
}
}