> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wethehivers.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Workflow admin

> Validation des recruteurs, modération des offres et sanctions

# Workflow admin

Les admins valident les nouveaux recruteurs, modèrent les offres et gèrent les sanctions. Toutes les actions sont loggées dans `audit_log`.

## Tableau de bord admin

```mermaid theme={null}
flowchart LR
    ADMIN[Admin connecté] --> DASH[GET /admin/dashboard]
    DASH --> KPI[KPIs]
    KPI --> NR[Recruteurs en attente]
    KPI --> NO[Offres signalées]
    KPI --> NC[Nouveaux candidats 7j]
    KPI --> REV[Chiffre d'affaires plans]
```

## 1. Validation d'un recruteur

```mermaid theme={null}
sequenceDiagram
    autonumber
    participant R as Recruteur
    participant M as Mail
    participant A as Admin
    participant API as Backend
    participant DB as DB

    R->>API: POST /recruiters/register
    API->>DB: INSERT status=PENDING_EMAIL
    API->>M: Email validation
    R->>API: GET /auth/validate-email?token=
    API->>DB: UPDATE status=PENDING_APPROVAL
    API->>M: Notif admins "Nouveau recruteur"

    A->>API: GET /admin/recruiters?status=PENDING_APPROVAL
    A->>API: GET /admin/recruiters/42
    A->>A: Vérifie RCCM, site web, LinkedIn
    alt Approuver
        A->>API: POST /admin/recruiters/42/approve
        API->>DB: UPDATE status=ACTIVE
        API->>M: Email "Validé"
    else Rejeter
        A->>API: POST /admin/recruiters/42/reject\n {motif}
        API->>DB: UPDATE status=REJECTED
        API->>M: Email "Rejeté + motif"
    else Demander infos
        A->>M: Email manuel hors-API
    end
```

### Critères de validation

```mermaid theme={null}
flowchart TD
    F[Fiche recruteur] --> C1{Email domaine\n cohérent avec entreprise?}
    C1 --> C2{RCCM valide\n et cohérent avec nom?}
    C2 --> C3{Site web existe\n et actif?}
    C3 --> C4{LinkedIn entreprise\n présent?}
    C4 --> C5{Secteur plausible?}
    C5 --> D{Décision}
    D -->|oui à tout| APP[Approuver]
    D -->|doutes| REQ[Demander justificatifs]
    D -->|non| REJ[Rejeter + motif explicite]
```

### Motifs de rejet types

| Motif                           | Code                     |
| ------------------------------- | ------------------------ |
| RCCM invalide ou introuvable    | `RCCM_INVALID`           |
| Entreprise inexistante en ligne | `ENTERPRISE_NOT_FOUND`   |
| Email non professionnel         | `NON_PROFESSIONAL_EMAIL` |
| Doublon d'entreprise            | `DUPLICATE_ENTERPRISE`   |
| Activité non conforme           | `PROHIBITED_ACTIVITY`    |

## 2. Modération d'offres

```mermaid theme={null}
flowchart TD
    EVT[Offre publiée] --> QUEUE[File modération 24h]
    QUEUE --> AUTO[Règles auto]
    AUTO --> CK1{Contact email/tel\n dans description?}
    CK1 -->|oui| FLAG1[Flag: bypass plateforme]
    AUTO --> CK2{Mots-clés interdits\n (arnaque, MLM, ...)?}
    CK2 -->|oui| FLAG2[Flag: contenu suspect]
    FLAG1 --> REV[Review admin]
    FLAG2 --> REV
    REV --> D{Décision}
    D -->|OK| UNFLAG[Unflag]
    D -->|Non| UNPUB[Force unpublish + email recruteur]
    D -->|Frauduleux| SUSP[Suspendre recruteur]
```

### Endpoints de modération offre

```http theme={null}
GET /v1/api/admin/offres?flagged=true
POST /v1/api/admin/offres/123/unpublish
POST /v1/api/admin/offres/123/flag { "motif": "..." }
```

## 3. Sanctions recruteur

```mermaid theme={null}
flowchart LR
    I[Incident] --> LVL{Gravité}
    LVL -->|Légère| WARN[Email warning]
    LVL -->|Moyenne| S30[SUSPENDED 30j auto]
    LVL -->|Grave| SPERM[SUSPENDED permanent]
    LVL -->|Fraude| BAN[DEACTIVATED + IP ban]
    S30 --> AUTO[Réactivation auto J+30]
    SPERM --> MANU[Réactivation manuelle possible]
```

### Effets d'une suspension

```mermaid theme={null}
flowchart TD
    SUSP[Recruteur SUSPENDED] --> O[Toutes offres PUBLISHED → CLOSED]
    SUSP --> T[Refresh tokens révoqués]
    SUSP --> A[Access JWT blacklisté]
    SUSP --> M[Email notification recruteur]
    SUSP --> L[Log audit_log]
```

## 4. Gestion des candidats

```mermaid theme={null}
flowchart TD
    SIGN[Signalement d'un candidat] --> REV[Review admin]
    REV --> A{Action}
    A -->|Valide| SUSP[Suspend candidat\n toutes candidatures WITHDRAWN]
    A -->|RGPD effacement| ANON[Anonymiser données]
    A -->|Faux positif| CLOSE[Fermer signalement]
```

### Endpoints

```http theme={null}
GET /v1/api/admin/candidates?suspended=true
POST /v1/api/admin/candidates/42/suspend { "motif": "..." }
POST /v1/api/admin/candidates/42/anonymize
```

## 5. Audit trail

Toutes les actions admin sont loggées :

```sql theme={null}
CREATE TABLE audit_log (
  id BIGSERIAL PRIMARY KEY,
  admin_id BIGINT,
  action VARCHAR(100),
  target_type VARCHAR(50),
  target_id BIGINT,
  payload JSONB,
  ip VARCHAR(45),
  at TIMESTAMPTZ DEFAULT NOW()
);
```

```mermaid theme={null}
flowchart LR
    ACT[Action admin] --> HOOK[Intercepteur Spring AOP]
    HOOK --> LOG[INSERT audit_log]
    LOG --> DASH[Dashboard admin / audit trail]
    DASH --> FILT[Filtres: admin, action, date, target]
```

Consultation : `GET /v1/api/admin/audit-log?action=recruiter.approve&adminId=1`

## 6. Gestion des plans & quotas

```mermaid theme={null}
flowchart TD
    PL[Plans] --> P1[Gratuit]
    PL --> P2[Essentiel]
    PL --> P3[Pro]
    PL --> P4[Entreprise]

    UPGR[Upgrade recruteur] --> API[POST /admin/recruiters/42/plan]
    API --> UPD[UPDATE plan]
    API --> NOTIF[Email confirmation]
```

## 7. Délégation

```mermaid theme={null}
flowchart LR
    SA[SUPER_ADMIN] -->|crée| A1[ADMIN]
    SA -->|crée| A2[ADMIN]
    A1 --> ACT1[Valide recruteurs]
    A2 --> ACT2[Modère blog]
    SA --> ALL[Accès complet + suppression admins]
```

| Action                         |     ADMIN     | SUPER\_ADMIN |
| ------------------------------ | :-----------: | :----------: |
| Valider / rejeter recruteurs   |       ✓       |       ✓      |
| Suspendre utilisateurs         |       ✓       |       ✓      |
| Publier blog                   |       ✓       |       ✓      |
| Créer d'autres admins          |       ✗       |       ✓      |
| Modifier configuration système |       ✗       |       ✓      |
| Voir tous les audit logs       | ✓ (les siens) |   ✓ (tous)   |

## Liens utiles

* [Cycle de vie recruteur](/concepts/cycle-de-vie-recruteur)
* [Cycle de vie offre](/concepts/cycle-de-vie-offre)
* [Rôles & permissions](/roles-permissions)
