Bonjour ${firstName}!
+Nous sommes ravis de vous accueillir dans notre jeu-concours Thé Tip Top!
+ +Vous pouvez dès maintenant participer au jeu en vous connectant à votre compte:
+ + + ++ Bonne chance et merci de votre participation! +
+diff --git a/src/controllers/auth.controller.js b/src/controllers/auth.controller.js index 76279524..73d9aed5 100644 --- a/src/controllers/auth.controller.js +++ b/src/controllers/auth.controller.js @@ -5,10 +5,7 @@ import bcrypt from 'bcrypt'; import { pool } from '../../db.js'; import { AppError, asyncHandler } from '../middleware/errorHandler.js'; import { generateToken, generateJWT, getTokenExpiry, isExpired } from '../utils/helpers.js'; -import { - sendVerificationEmail, - sendResetPasswordEmail, -} from '../services/email.service.js'; +import { sendResetPasswordEmail, sendWelcomeEmail } from '../services/email.service.js'; /** * Inscription d'un nouvel utilisateur @@ -27,30 +24,27 @@ export const register = asyncHandler(async (req, res, next) => { // Hasher le mot de passe const hashedPassword = await bcrypt.hash(password, 10); - // Générer un token de vérification - const verificationToken = generateToken(); - - // Créer l'utilisateur + // Créer l'utilisateur (vérifié directement, sans vérification email) const result = await pool.query( - `INSERT INTO users (email, password, first_name, last_name, phone, address, city, postal_code, verification_token) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) + `INSERT INTO users (email, password, first_name, last_name, phone, address, city, postal_code, is_verified) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, TRUE) RETURNING id, email, first_name, last_name, role, created_at`, - [email, hashedPassword, firstName, lastName, phone, address, city, postalCode, verificationToken] + [email, hashedPassword, firstName, lastName, phone, address, city, postalCode] ); const user = result.rows[0]; - // Envoyer l'email de vérification + // Envoyer l'email de bienvenue try { - await sendVerificationEmail(email, verificationToken); + await sendWelcomeEmail(email, firstName); } catch (error) { - console.error('Erreur envoi email:', error); + console.error('Erreur envoi email de bienvenue:', error); // On ne bloque pas l'inscription si l'email échoue } res.status(201).json({ success: true, - message: 'Inscription réussie. Veuillez vérifier votre email pour activer votre compte.', + message: 'Inscription réussie.', user: { id: user.id, email: user.email, diff --git a/src/controllers/draw.controller.js b/src/controllers/draw.controller.js index 0ee370c8..0691bb0e 100644 --- a/src/controllers/draw.controller.js +++ b/src/controllers/draw.controller.js @@ -3,6 +3,7 @@ */ import { pool } from '../../db.js'; import { AppError, asyncHandler } from '../middleware/errorHandler.js'; +import { sendDrawWinnerEmail } from '../services/email.service.js'; /** * Récupérer la liste des participants éligibles @@ -179,6 +180,14 @@ export const conductDraw = asyncHandler(async (req, res) => { console.log(` Participants éligibles: ${eligibleParticipants.length}`); console.log(` Total participants: ${totalParticipants}`); + // Envoyer l'email de notification au gagnant + try { + await sendDrawWinnerEmail(winner.email, winner.first_name, prizeName || 'Un an de thé d\'une valeur de 360€'); + console.log(` 📧 Email de notification envoyé à ${winner.email}`); + } catch (error) { + console.error('Erreur envoi email au gagnant:', error); + } + res.json({ success: true, message: 'Tirage au sort effectué avec succès!', diff --git a/src/controllers/user.controller.js b/src/controllers/user.controller.js index a975b5c9..d50416a2 100644 --- a/src/controllers/user.controller.js +++ b/src/controllers/user.controller.js @@ -4,6 +4,7 @@ import bcrypt from 'bcrypt'; import { pool } from '../../db.js'; import { AppError, asyncHandler } from '../middleware/errorHandler.js'; +import { sendAccountDeletedEmail } from '../services/email.service.js'; /** * Récupérer le profil de l'utilisateur connecté @@ -167,9 +168,23 @@ export const changePassword = asyncHandler(async (req, res, next) => { export const deleteAccount = asyncHandler(async (req, res) => { const userId = req.user.id; + // Récupérer les infos de l'utilisateur avant suppression + const userResult = await pool.query( + 'SELECT email, first_name FROM users WHERE id = $1', + [userId] + ); + const user = userResult.rows[0]; + // Supprimer l'utilisateur (les tickets seront supprimés en cascade) await pool.query('DELETE FROM users WHERE id = $1', [userId]); + // Envoyer l'email de confirmation de suppression + try { + await sendAccountDeletedEmail(user.email, user.first_name); + } catch (error) { + console.error('Erreur envoi email de suppression:', error); + } + res.json({ success: true, message: 'Compte supprimé avec succès', diff --git a/src/services/email.service.js b/src/services/email.service.js index 1e912ab9..a9edf9ed 100644 --- a/src/services/email.service.js +++ b/src/services/email.service.js @@ -320,9 +320,235 @@ export const sendContactEmail = async ({ fullName, email, subject, message }) => }); }; +/** + * Envoie un email de bienvenue à l'inscription + */ +export const sendWelcomeEmail = async (email, firstName) => { + const loginUrl = `${process.env.FRONTEND_URL || 'http://localhost:3000'}/login`; + + const html = ` + + +
+ + + +Nous sommes ravis de vous accueillir dans notre jeu-concours Thé Tip Top!
+ +Vous pouvez dès maintenant participer au jeu en vous connectant à votre compte:
+ + + ++ Bonne chance et merci de votre participation! +
+Nous vous confirmons que votre compte Thé Tip Top a bien été supprimé.
+ +Toutes vos données personnelles ont été effacées de notre système conformément à la réglementation RGPD.
+ +Nous espérons vous revoir bientôt parmi nous!
+ ++ Si vous n'êtes pas à l'origine de cette demande, veuillez nous contacter immédiatement. +
+Vous êtes le GRAND GAGNANT du tirage au sort!
+D'une valeur de 360€!
+Vous avez été sélectionné parmi tous les participants au jeu-concours Thé Tip Top pour remporter notre gros lot!
+ +Pour récupérer votre gain:
+
+ Merci d'avoir participé au jeu-concours Thé Tip Top!
+ Toute l'équipe vous félicite chaleureusement! 🍵
+