121 lines
3.2 KiB
TypeScript
121 lines
3.2 KiB
TypeScript
// http://127.0.0.1:8000/api/v1/contact/create/
|
||
|
||
export default defineEventHandler(async (event) => {
|
||
const config = useRuntimeConfig();
|
||
const apiUrl = config.public.BASE_API_URL || 'http://127.0.0.1:8000';
|
||
|
||
// Backend credentials
|
||
const BACKEND_EMAIL = config.backendEmail || 'admin@example.com';
|
||
const BACKEND_PASSWORD = config.backendPassword || 'admin123';
|
||
|
||
try {
|
||
// Form verilerini al
|
||
const body = await readBody(event);
|
||
|
||
// Gerekli alanları kontrol et
|
||
const { name, email, subject, message } = body;
|
||
|
||
if (!name || !email || !subject || !message) {
|
||
throw createError({
|
||
statusCode: 400,
|
||
statusMessage: 'Tüm alanlar zorunludur'
|
||
});
|
||
}
|
||
|
||
// Client IP adresini al
|
||
const ip = getRequestIP(event, { xForwardedFor: true }) || 'unknown';
|
||
|
||
// 1. Önce backend'e login ol
|
||
let loginResponse;
|
||
try {
|
||
loginResponse = await $fetch(`${apiUrl}/api/v1/auth/jwt/create/`, {
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
},
|
||
body: {
|
||
email: BACKEND_EMAIL,
|
||
password: BACKEND_PASSWORD
|
||
}
|
||
});
|
||
} catch (loginError: any) {
|
||
// Detaylı hatayı sadece console'da göster
|
||
console.error('Backend login error:', {
|
||
status: loginError?.status,
|
||
statusText: loginError?.statusText,
|
||
message: loginError?.message
|
||
});
|
||
|
||
throw createError({
|
||
statusCode: 503,
|
||
statusMessage: 'Servis geçici olarak kullanılamıyor. Lütfen daha sonra tekrar deneyin.'
|
||
});
|
||
}
|
||
|
||
// @ts-expect-error - API response type
|
||
const accessToken = loginResponse?.access;
|
||
|
||
if (!accessToken) {
|
||
console.error('No access token received from backend');
|
||
throw createError({
|
||
statusCode: 503,
|
||
statusMessage: 'Servis geçici olarak kullanılamıyor. Lütfen daha sonra tekrar deneyin.'
|
||
});
|
||
}
|
||
|
||
// 2. Token ile contact form'u post et (IP adresi ile birlikte)
|
||
let contactResponse;
|
||
try {
|
||
contactResponse = await $fetch(`${apiUrl}/api/v1/contact/create/`, {
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
'Authorization': `Bearer ${accessToken}`
|
||
},
|
||
body: {
|
||
name,
|
||
email,
|
||
ip,
|
||
subject,
|
||
message
|
||
}
|
||
});
|
||
} catch (contactError: any) {
|
||
// Detaylı hatayı sadece console'da göster
|
||
console.error('Contact form submission error:', {
|
||
status: contactError?.status,
|
||
statusText: contactError?.statusText,
|
||
message: contactError?.message
|
||
});
|
||
|
||
throw createError({
|
||
statusCode: 500,
|
||
statusMessage: 'Mesaj gönderilemedi. Lütfen daha sonra tekrar deneyin.'
|
||
});
|
||
}
|
||
|
||
return {
|
||
success: true,
|
||
data: contactResponse,
|
||
message: 'Mesajınız başarıyla gönderildi'
|
||
};
|
||
|
||
} catch (error: any) {
|
||
// Eğer zaten createError ile oluşturulmuş bir hata ise, direkt fırlat
|
||
if (error.statusCode) {
|
||
throw error;
|
||
}
|
||
|
||
// Beklenmeyen hatalar için
|
||
console.error('Unexpected contact form error:', error);
|
||
|
||
throw createError({
|
||
statusCode: 500,
|
||
statusMessage: 'Bir hata oluştu. Lütfen daha sonra tekrar deneyin.'
|
||
});
|
||
}
|
||
});
|
||
|
||
|
||
|