feat: Add data erasure request form and a new backend API endpoint for message submission.
This commit is contained in:
@@ -3,6 +3,8 @@ import cors from 'cors';
|
||||
import dotenv from 'dotenv';
|
||||
import pool from './config/db';
|
||||
|
||||
import messagesRouter from './routes/messages';
|
||||
|
||||
dotenv.config();
|
||||
|
||||
const app = express();
|
||||
@@ -11,6 +13,8 @@ const port = process.env.PORT || 3000;
|
||||
app.use(cors());
|
||||
app.use(express.json());
|
||||
|
||||
app.use('/api/messages', messagesRouter);
|
||||
|
||||
// Basic health check
|
||||
app.get('/api/health', (req, res) => {
|
||||
res.json({ status: 'ok', timestamp: new Date() });
|
||||
|
||||
51
backend/src/routes/messages.ts
Normal file
51
backend/src/routes/messages.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import { Router, Request, Response } from 'express';
|
||||
import pool from '../config/db';
|
||||
import { RowDataPacket, 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, 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 (!email || email.trim() === '') {
|
||||
errors.push("L'email est requis.");
|
||||
} else if (!isValidEmail(email)) {
|
||||
errors.push("L'format de l'email est invalide.");
|
||||
}
|
||||
// if (!message || message.trim() === '') errors.push('Le message est requis.'); // Message is now optional
|
||||
|
||||
if (errors.length > 0) {
|
||||
res.status(400).json({ status: 'error', errors });
|
||||
return;
|
||||
}
|
||||
|
||||
// Default message if empty
|
||||
const messageContent = (!message || message.trim() === '') ? 'Supprimer toutes les données' : message;
|
||||
|
||||
// 2. Insert into Database
|
||||
try {
|
||||
const query = 'INSERT INTO messages (nom, prenom, email, message) VALUES (?, ?, ?, ?)';
|
||||
const [result] = await pool.query<ResultSetHeader>(query, [nom, prenom, email, messageContent]);
|
||||
|
||||
res.status(201).json({
|
||||
status: 'success',
|
||||
message: 'Demande envoyée avec succès.',
|
||||
id: result.insertId
|
||||
});
|
||||
} catch (error: any) {
|
||||
console.error('Error inserting message:', error);
|
||||
res.status(500).json({ status: 'error', message: 'Erreur serveur lors de la sauvegarde.' });
|
||||
}
|
||||
});
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user