Votre compte est déjà actif ou n'a jamais été marqué pour suppression.
+
+ Se connecter
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
+
+
Réactiver mon compte
+
Heureux de vous revoir, {user.name} !
+
+
+
+
+ Votre compte était programmé pour une suppression définitive. En le réactivant, vous conservez toutes vos données, vos messages et vos favoris.
+
+
+
+
+
+
+ );
+}
diff --git a/doc/admin/gestion_utilisateurs.md b/doc/admin/gestion_utilisateurs.md
new file mode 100644
index 0000000..0dc15e8
--- /dev/null
+++ b/doc/admin/gestion_utilisateurs.md
@@ -0,0 +1,38 @@
+# Guide de Gestion des Utilisateurs (Suspension & Suppression)
+
+Ce document détaille les procédures de sanctions et de gestion des comptes sur Afrohub.
+
+## 1. Suspension de Compte
+La suspension est une mesure temporaire permettant de bloquer l'accès d'un utilisateur sans supprimer ses données.
+
+### 1.1. Suspension Entrepreneur
+- **Compte Suspendu** : L'entrepreneur ne peut plus se connecter. Son shop est automatiquement masqué.
+- **Shop Masqué (Uniquement)** : L'entrepreneur peut se connecter, mais sa boutique n'est plus visible dans l'annuaire.
+
+### 1.2. Suspension Visiteur
+- L'accès à la messagerie et aux fonctionnalités interactives (avis, favoris) est bloqué.
+
+## 2. Suppression de Compte (Soft Delete & Grace Period)
+La suppression suit un cycle de vie sécurisé pour permettre la réactivation en cas d'erreur ou de changement d'avis.
+
+### 2.1. Déclenchement par l'Admin
+L'admin choisit :
+1. **Le Motif** : Violation des CGU, Inactivité, Demande de l'utilisateur, etc.
+2. **Le Délai** :
+ - **Immédiat** : Le compte est supprimé à la prochaine exécution du script de nettoyage.
+ - **7, 15, 30 jours** : Le compte est désactivé mais conservé en base pendant cette durée.
+
+### 2.2. État "Suppression en cours"
+- L'utilisateur ne peut plus se connecter.
+- Il reçoit un email contenant un lien de réactivation.
+- Dans l'admin, la ligne utilisateur est affichée en rouge avec le statut "Suppression en cours".
+
+### 2.3. Réactivation
+- L'utilisateur peut cliquer sur le lien dans son mail.
+- Il doit fournir une justification pour la réactivation.
+- Une fois validé, le compte redevient "Actif" et le délai de suppression est annulé.
+
+## 3. Suppression Définitive (Hard Delete)
+- S'exécute automatiquement via la tâche Cron.
+- Supprime toutes les données associées en cascade (Boutique, Messages, Avis, Favoris).
+- **Action irréversible**.
diff --git a/doc/admin/guide_maintenance.md b/doc/admin/guide_maintenance.md
new file mode 100644
index 0000000..86aaf5f
--- /dev/null
+++ b/doc/admin/guide_maintenance.md
@@ -0,0 +1,35 @@
+# Guide de Maintenance et Déploiement (Admin)
+
+## 1. Architecture Monorepo
+Le projet utilise **npm workspaces**.
+- Racine : Dépendances partagées, Prisma Schema, Dossier `/app` (Front).
+- `/admin` : Application Next.js dédiée à l'administration.
+
+## 2. Commandes Utiles
+À exécuter depuis la racine du projet :
+- `npm run dev:admin` : Lancer l'admin en développement.
+- `npm run build:admin` : Builder l'admin pour la production.
+- `npx prisma db push` : Synchroniser le schéma Prisma avec la base de données.
+- `npx prisma generate` : Régénérer le client Prisma.
+
+## 3. Déploiement sur Dokploy
+### Configuration de l'application Admin :
+- **Build Command** : `npm run build:admin`
+- **Start Command** : `npm run start:admin`
+- **Install Command** : `npm install --legacy-peer-deps` (à la racine)
+
+### Variables d'environnement critiques :
+- `DATABASE_URL` : Connexion PostgreSQL.
+- `CRON_SECRET` : Clé pour sécuriser le nettoyage des comptes.
+- `SMTP_HOST`, `SMTP_USER`, `SMTP_PASS` : Configuration pour l'envoi d'emails.
+- `NEXT_PUBLIC_APP_URL` : URL du site front-end (pour les liens de réactivation).
+
+## 4. Configuration des Tâches Cron
+Pour automatiser la suppression définitive des comptes :
+1. Dans Dokploy, créez une tâche Cron pour l'application Admin.
+2. Planification : `0 0 * * *` (tous les jours à minuit).
+3. Commande : `curl -X GET "https://votre-admin.com/api/cron/cleanup-users?key=VOTRE_SECRET"`
+
+## 5. Gestion de la Base de Données
+Le schéma Prisma se trouve à la racine : `/prisma/schema.prisma`.
+Toute modification du schéma doit être suivie d'un `npx prisma db push` et d'un redémarrage des serveurs pour que le client Prisma soit mis à jour.
diff --git a/doc/admin/specs_fonctionnelles.md b/doc/admin/specs_fonctionnelles.md
new file mode 100644
index 0000000..0d0dfa1
--- /dev/null
+++ b/doc/admin/specs_fonctionnelles.md
@@ -0,0 +1,44 @@
+# Spécifications Fonctionnelles - Panel Administration
+
+## 1. Vue d'ensemble
+Le panel d'administration permet de piloter l'ensemble de la plateforme Afrohub, de modérer les contenus et de gérer la configuration globale.
+
+## 2. Tableau de Bord (Dashboard)
+- Statistiques clés : Nombre d'utilisateurs, entreprises, avis en attente.
+- Métriques d'audience (via le menu Metrics).
+- Visualisation géographique des entreprises.
+
+## 3. Gestion des Utilisateurs
+### 3.1. Entrepreneurs
+- Validation des boutiques (Certification).
+- Modification des forfaits (Starter, Booster, Empire).
+- Gestion de la mise en avant (Slides Home).
+- Suspension de boutique ou de compte complet.
+- Suppression de compte avec choix du motif et du délai (0, 7, 15, 30 jours).
+
+### 3.2. Visiteurs
+- Consultation des informations de contact.
+- Vérification manuelle de l'email.
+- Suspension et suppression de compte.
+
+## 4. Modération des Contenus
+- **Avis** : Approbation ou rejet des avis laissés par les utilisateurs.
+- **Signalements** : Traitement des messages signalés dans la messagerie.
+- **Commentaires** : Gestion des commentaires sur les articles.
+
+## 5. Gestion éditoriale
+- **Actualités** : Création, édition et suppression d'articles.
+- **Interviews** : Gestion des entretiens avec les entrepreneurs.
+- **Événements** : Publication et gestion de l'agenda.
+- **Slides** : Configuration du carrousel de la page d'accueil (Boutiques ou Custom).
+
+## 6. Configuration du Site
+- Informations de contact (Email, Téléphone, Adresse).
+- Liens réseaux sociaux.
+- Gestion des documents légaux (CGU, CGV, Confidentialité).
+- Personnalisation des templates d'emails (Vérification, Mot de passe, Suppression, Réactivation).
+- Gestion des taxonomies (Catégories d'entreprises, Pays).
+
+## 7. Automatisation (Cron)
+- Nettoyage automatique des comptes marqués pour suppression après expiration du délai.
+- URL sécurisée : `/api/cron/cleanup-users?key=SECRET`.
diff --git a/doc/front/specs_fonctionnelles.md b/doc/front/specs_fonctionnelles.md
new file mode 100644
index 0000000..53c74ef
--- /dev/null
+++ b/doc/front/specs_fonctionnelles.md
@@ -0,0 +1,40 @@
+# Spécifications Fonctionnelles - Plateforme Front-end
+
+## 1. Introduction
+Afrohub est une plateforme dédiée à l'entrepreneuriat africain, permettant aux entrepreneurs de mettre en avant leurs activités et aux visiteurs de découvrir des entreprises, des événements et des actualités.
+
+## 2. Rôles Utilisateurs
+- **Visiteur (Non connecté)** : Peut consulter l'annuaire, les actualités, les événements et s'inscrire.
+- **Client/Visiteur (Connecté)** : Peut mettre en favoris des entreprises, envoyer des messages et laisser des avis.
+- **Entrepreneur** : Possède toutes les fonctionnalités du visiteur connecté, plus la gestion de sa propre boutique/entreprise (Shop).
+- **Admin** : Gère la plateforme via le panel d'administration dédié.
+
+## 3. Fonctionnalités Principales
+
+### 3.1. Annuaire d'Entreprises
+- Consultation par catégories (Technologie, Agriculture, Mode, etc.).
+- Recherche par localisation et mots-clés.
+- Fiches détaillées : Vidéo de présentation, coordonnées, liens sociaux, tags.
+- Système de notation et avis (avec modération).
+
+### 3.2. Actualités et Contenu
+- **Articles de Blog** : Informations sur l'écosystème entrepreneurial.
+- **Interviews** : Interviews d'entrepreneurs (vidéo ou article).
+- **Événements** : Agenda des événements à venir.
+
+### 3.3. Messagerie
+- Mise en relation directe entre visiteurs et entrepreneurs.
+- Système de conversation privée.
+- Signalement de messages inappropriés.
+
+### 3.4. Authentification et Sécurité
+- Inscription et Connexion.
+- Vérification d'email obligatoire.
+- Réinitialisation de mot de passe.
+- **Gestion du compte** : Possibilité de demander la suppression de son compte avec un délai de grâce de 30 jours.
+- **Réactivation** : Possibilité de réactiver un compte en cours de suppression via un lien sécurisé.
+
+## 4. Parcours Utilisateur
+1. **Découverte** : Accueil -> Recherche -> Fiche Entreprise.
+2. **Interaction** : Connexion -> Message à l'entrepreneur ou Avis.
+3. **Conversion (Entrepreneur)** : Inscription -> Création de boutique -> Choix d'un forfait (Starter, Booster, Empire).
diff --git a/next-env.d.ts b/next-env.d.ts
index 9edff1c..c4b7818 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/types/routes.d.ts";
+import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 9c40989..ae9d65a 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -6,6 +6,7 @@ generator client {
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
+ relationMode = "prisma"
}
model User {
@@ -35,6 +36,10 @@ model User {
reports MessageReport[]
ratings Rating[]
country Country? @relation(fields: [countryId], references: [id])
+ deletedAt DateTime?
+ deletionScheduledAt DateTime?
+ deletionReason String?
+ reactivationReason String?
}
model Business {
@@ -80,7 +85,7 @@ model Business {
metaTitle String?
categoryRef BusinessCategory? @relation(fields: [categoryId], references: [id])
country Country? @relation(fields: [countryId], references: [id])
- owner User @relation(fields: [ownerId], references: [id])
+ owner User @relation(fields: [ownerId], references: [id], onDelete: Cascade)
comments Comment[]
conversations Conversation[]
favorites Favorite[]
@@ -322,6 +327,10 @@ model SiteSetting {
resetPasswordTemplate String @default("
{siteName}
Bonjour {name},
Vous avez demandé la réinitialisation de votre mot de passe. Cliquez sur le bouton ci-dessous pour choisir un nouveau mot de passe :
")
verifyEmailSubject String @default("Vérification de votre compte - Afrohub")
verifyEmailTemplate String @default("
{siteName}
Bonjour {name},
Merci de vous être inscrit sur {siteName}. Pour finaliser la création de votre compte, merci de vérifier votre adresse email en cliquant sur le bouton ci-dessous :