57 lines
1.9 KiB
TypeScript
57 lines
1.9 KiB
TypeScript
import { Router, Request, Response } from 'express';
|
|
import pool from '../config/db';
|
|
import { ResultSetHeader } from 'mysql2';
|
|
|
|
const router = Router();
|
|
|
|
// Validation helper
|
|
const isValidEmail = (email: string) => {
|
|
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
|
|
};
|
|
|
|
router.post('/', async (req: Request, res: Response): Promise<void> => {
|
|
const { nom, prenom, account_email, contact_email, message } = req.body;
|
|
|
|
// 1. Validation
|
|
const errors: string[] = [];
|
|
|
|
if (!nom || nom.trim() === '') errors.push('Le nom est requis.');
|
|
if (!prenom || prenom.trim() === '') errors.push('Le prénom est requis.');
|
|
|
|
if (!account_email || account_email.trim() === '') {
|
|
errors.push("L'email du compte est requis.");
|
|
} else if (!isValidEmail(account_email)) {
|
|
errors.push("Le format de l'email du compte est invalide.");
|
|
}
|
|
|
|
if (!contact_email || contact_email.trim() === '') {
|
|
errors.push("L'email de contact est requis.");
|
|
} else if (!isValidEmail(contact_email)) {
|
|
errors.push("Le format de l'email de contact est invalide.");
|
|
}
|
|
|
|
if (!message || message.trim() === '') errors.push('Le message est requis.');
|
|
|
|
if (errors.length > 0) {
|
|
res.status(400).json({ status: 'error', errors });
|
|
return;
|
|
}
|
|
|
|
// 2. Insert into Database
|
|
try {
|
|
const query = 'INSERT INTO support_requests (nom, prenom, account_email, contact_email, message) VALUES (?, ?, ?, ?, ?)';
|
|
const [result] = await pool.query<ResultSetHeader>(query, [nom, prenom, account_email, contact_email, message]);
|
|
|
|
res.status(201).json({
|
|
status: 'success',
|
|
message: 'Demande de support envoyée avec succès.',
|
|
id: result.insertId
|
|
});
|
|
} catch (error: any) {
|
|
console.error('Error inserting support request:', error);
|
|
res.status(500).json({ status: 'error', message: 'Erreur serveur lors de la sauvegarde.' });
|
|
}
|
|
});
|
|
|
|
export default router;
|