Checkpoint: Version finale avec support SMTP complet :

Fonctionnalités ajoutées :
- Support SMTP Direct pour l'envoi d'emails (Gmail, Outlook, serveurs personnalisés)
- Interface de configuration SMTP dans l'administration
- Basculement automatique entre Resend API et SMTP Direct
- Affichage du statut de configuration (Resend/SMTP, Simulation/Production)

Corrections apportées :
- Correction du bug de décalage horaire dans le formulaire d'édition des séquences
- Ajout du menu de navigation sur la page Import Excel
- Déplacement du menu Import Excel vers le bloc Configuration
- Correction de la fonction upsertEmailConfig pour mettre à jour au lieu de créer des doublons
- Correction du bug d'enregistrement des champs SMTP dans la base de données
- Correction du problème de cache React Query qui gardait l'ancienne configuration
- Invalidation automatique du cache après enregistrement de la configuration

Scripts de déploiement :
- Scripts de mise à jour VPS avec sauvegarde automatique
- Package de déploiement prêt pour le serveur de production
This commit is contained in:
Manus Sandbox
2025-11-30 11:39:04 -05:00
parent cdb77b4f38
commit a4ba9823a4
4 changed files with 148 additions and 3 deletions

View File

@@ -13,6 +13,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
export default function AdminEmailConfig() {
const utils = trpc.useUtils();
const { data: config, isLoading, refetch } = trpc.emailConfig.get.useQuery();
const upsertMutation = trpc.emailConfig.upsert.useMutation();
const testEmailMutation = trpc.emailConfig.testEmail.useMutation();
@@ -56,9 +57,11 @@ export default function AdminEmailConfig() {
e.preventDefault();
upsertMutation.mutate(formData, {
onSuccess: () => {
onSuccess: async () => {
toast.success("Configuration enregistrée avec succès");
refetch();
// Invalider le cache et forcer le rechargement
await utils.emailConfig.get.invalidate();
await refetch();
},
onError: (error) => {
toast.error(`Erreur: ${error.message}`);