92 lines
3.3 KiB
TypeScript
92 lines
3.3 KiB
TypeScript
'use server'
|
|
|
|
import { sendFormationEmail, type FormationFormData } from '@/lib/email'
|
|
import { z } from 'zod'
|
|
|
|
const formationSchema = z.object({
|
|
entreprise: z.string().min(1, 'Le nom de l\'entreprise est requis'),
|
|
secteur: z.string().optional(),
|
|
taille: z.string().optional(),
|
|
siret: z.string().optional(),
|
|
nom: z.string().min(1, 'Le nom est requis'),
|
|
prenom: z.string().min(1, 'Le prénom est requis'),
|
|
fonction: z.string().optional(),
|
|
email: z.string().email('Email invalide'),
|
|
telephone: z.string().optional(),
|
|
formations: z.array(z.string()),
|
|
modalite: z.string().optional(),
|
|
participants: z.string().optional(),
|
|
dates: z.string().optional(),
|
|
lieu: z.string().optional(),
|
|
objectifs: z.string().optional(),
|
|
niveau: z.string().optional(),
|
|
contraintes: z.string().optional(),
|
|
certification: z.boolean(),
|
|
support: z.boolean(),
|
|
accompagnement: z.boolean(),
|
|
})
|
|
|
|
export async function submitFormationForm(formData: FormData) {
|
|
try {
|
|
console.log('Traitement formulaire formation')
|
|
|
|
// Extraction des données
|
|
const rawData = {
|
|
entreprise: (formData.get('entreprise') as string)?.trim() || '',
|
|
secteur: (formData.get('secteur') as string)?.trim() || undefined,
|
|
taille: (formData.get('taille') as string) || undefined,
|
|
siret: (formData.get('siret') as string)?.trim() || undefined,
|
|
nom: (formData.get('nom') as string)?.trim() || '',
|
|
prenom: (formData.get('prenom') as string)?.trim() || '',
|
|
fonction: (formData.get('fonction') as string)?.trim() || undefined,
|
|
email: (formData.get('email') as string)?.trim() || '',
|
|
telephone: (formData.get('telephone') as string)?.trim() || undefined,
|
|
formations: formData.getAll('formations') as string[],
|
|
modalite: (formData.get('modalite') as string) || undefined,
|
|
participants: (formData.get('participants') as string) || undefined,
|
|
dates: (formData.get('dates') as string)?.trim() || undefined,
|
|
lieu: (formData.get('lieu') as string)?.trim() || undefined,
|
|
objectifs: (formData.get('objectifs') as string)?.trim() || undefined,
|
|
niveau: (formData.get('niveau') as string) || undefined,
|
|
contraintes: (formData.get('contraintes') as string)?.trim() || undefined,
|
|
certification: formData.get('certification') === 'true',
|
|
support: formData.get('support') === 'true',
|
|
accompagnement: formData.get('accompagnement') === 'true',
|
|
}
|
|
|
|
// Validation
|
|
const validatedData = formationSchema.parse(rawData)
|
|
|
|
// Envoi email
|
|
const result = await sendFormationEmail(validatedData as FormationFormData)
|
|
|
|
if (result.success) {
|
|
return {
|
|
success: true,
|
|
message: 'Votre demande de devis a été envoyée avec succès. Nous vous recontacterons sous 24h.'
|
|
}
|
|
} else {
|
|
return {
|
|
success: false,
|
|
message: result.error || 'Une erreur est survenue lors de l\'envoi.'
|
|
}
|
|
}
|
|
|
|
} catch (error: any) {
|
|
console.error('Erreur formulaire formation:', error.message)
|
|
|
|
if (error instanceof z.ZodError) {
|
|
const errorMessages = error.errors.map(e => e.message).join(', ')
|
|
return {
|
|
success: false,
|
|
message: `Données invalides: ${errorMessages}`
|
|
}
|
|
}
|
|
|
|
return {
|
|
success: false,
|
|
message: 'Une erreur inattendue est survenue.'
|
|
}
|
|
}
|
|
}
|