Guide de l'Administrateur

Pilotez et maintenez la plateforme LBC237

1

Dashboard administrateur

Le tableau de bord admin affiche les KPIs essentiels de la plateforme.

Métriques affichées

Utilisateurs totaux
Candidats + Recruteurs + Admins
Offres actives
Offres avec statut "active"
Candidatures
Total des candidatures ce mois
Matchs IA
Scores calculés aujourd'hui
Revenus
Paiements ce mois en FCFA
Offres en attente
À modérer

Graphiques disponibles

  • Croissance des inscriptions (30 derniers jours)
  • Répartition des utilisateurs par rôle
  • Évolution des offres publiées
  • Taux de conversion des candidatures
  • Revenus par plan d'abonnement
2

Gestion des utilisateurs

Gérez tous les utilisateurs depuis Admin > Utilisateurs.

Actions disponibles

Activer un compte

Autoriser l'utilisateur à se connecter et utiliser la plateforme.

Suspendre un compte

Bloquer temporairement l'accès en cas de comportement inapproprié. L'utilisateur verra un message d'erreur à la connexion.

Consulter un profil

Voir les détails complets : date d'inscription, activité, abonnement, candidatures.

Filtres

  • Par rôle : Candidats, Recruteurs, Admins
  • Par statut : Actif, Suspendu, Email non vérifié
  • Recherche par nom ou email
3

Modération des offres

Modérez les offres d'emploi depuis Admin > Offres.

Flux de modération

  1. Les nouvelles offres arrivent avec le statut En attente
  2. L'IA calcule automatiquement un score de fraude et un score de qualité
  3. Vous examinez l'offre et décidez :
    Approuver

    L'offre est publiée et visible

    Rejeter

    L'offre est refusée (spam, fraude)

    Supprimer

    Suppression définitive

Indicateurs de fraude IA

  • Score de fraude — Score de 0 (légitime) à 100 (probable fraude). Les offres avec un score > 70 sont signalées automatiquement.
  • Score de qualité — Score de 0 à 100 mesurant la complétude et la pertinence de l'offre.
  • Indicateurs vérifiés — Présence de numéro de téléphone suspect, demande de paiement, lien externe douteux, etc.

Vue détaillée

Cliquez sur une offre pour accéder à la vue détaillée (Admin > Offres > Détail) qui affiche :

  • Description complète de l'offre
  • Informations du recruteur
  • Scores de fraude et qualité IA
  • Source (publiée manuellement ou scrapée)
  • Nombre de vues et candidatures
4

Contrôle du scraping

Gérez la collecte automatique d'offres depuis Admin > Scraping.

Sources de scraping

Source Statut Fréquence
JobInfoCamerActifToutes les 4h
Emploi.cmActifToutes les 4h
LinkedInActifToutes les 4h
KamerPowerActifToutes les 4h
MinaJobsActifToutes les 4h

Lancer un scraping manuel

  1. Accédez à Admin > Scraping
  2. Cliquez sur Lancer le scraping
  3. Le processus collecte les offres de toutes les sources actives
  4. Les nouvelles offres sont automatiquement dédupliquées (hash SHA256)
  5. Consultez les logs pour vérifier le bon déroulement

Logs de scraping

Chaque exécution génère des logs détaillés :

  • Nombre d'offres collectées par source
  • Nouveaux ajouts vs doublons
  • Erreurs éventuelles avec contexte
  • Durée d'exécution

Attention : Le scraping utilise des requêtes parallèles (8 simultanées max) avec retry exponentiel. Évitez de lancer plusieurs sessions de scraping en parallèle.

Via le terminal

# Scraping standard

php scripts/cron/scrape_jobs.php

# Scraping intelligent (adaptatif)

php scripts/cron/scrape_intelligent.php

# Scraping proactif (requêtes diversifiées)

php scripts/cron/scrape_proactive.php

5

Matching IA

Le matching IA est calculé automatiquement après chaque session de scraping. Vous pouvez aussi le relancer manuellement.

Relancer le matching

# Via le terminal

php scripts/cron/calculate_matches.php

Ou via l'API : POST /api/v1/admin/matching/run

Configuration du matching

Dans config/ai.php :

'matching' => [

'min_score' => 40, // Score minimum affiché

'good_score' => 60, // Seuil "bon match"

'excellent_score' => 80, // Seuil "excellent"

]

6

Gestion du blog

Le CMS blog est accessible depuis Admin > Blog.

Créer un article

  1. Cliquez sur Nouvel article
  2. Remplissez :
    • Titre — Titre accrocheur pour le SEO
    • Contenu — Corps de l'article (HTML supporté)
    • Catégorie — Parmi les 8 catégories pré-définies
    • Tags — Mots-clés pour le référencement
    • Image — Photo d'illustration (upload intégré)
    • Article mis en avant — Pour l'afficher en premier sur le blog
  3. Publiez ou enregistrez en brouillon

8 catégories pré-définies

Conseils CV Entretien Carrière Marché emploi Entrepreneuriat Formation Technologie Salaires
7

Logs et monitoring

Consultez les logs système depuis Admin > Logs.

Niveaux de log

DEBUG — Informations de développement INFO — Événements normaux WARNING — Anomalies non critiques ERROR — Erreurs à corriger CRITICAL — Erreurs bloquantes

Canaux de log

  • auth — Connexions, déconnexions, tentatives échouées
  • scraping — Exécution du scraping, erreurs réseau
  • matching — Calculs IA, scores, erreurs provider
  • payment — Transactions, webhooks, erreurs paiement
  • email — Envoi d'emails, erreurs SMTP
  • push — Notifications push, erreurs, désactivations
  • system — Événements système généraux

Filtres

Filtrez les logs par canal, niveau de sévérité, date et utilisateur pour identifier rapidement les problèmes.

8

Paiements et abonnements

Suivez les transactions depuis l'API : GET /api/v1/admin/payments

Informations disponibles

  • Historique complet des transactions
  • Statut de chaque paiement (pending, completed, failed)
  • Méthode de paiement (MTN MoMo / Orange Money)
  • Référence NotchPay
  • Montant et plan souscrit

Webhooks

Les webhooks NotchPay, MTN et Orange arrivent automatiquement et sont vérifiés par signature HMAC-SHA256. En cas de problème :

  1. Vérifiez les logs canal "payment"
  2. Confirmez que les clés webhook dans .env sont correctes
  3. Vérifiez que l'URL /api/v1/webhooks/notchpay est accessible publiquement
9

Tâches planifiées (Cron)

L'orchestrateur scripts/cron/master.php gère toutes les tâches automatiques.

Planning des tâches

Tâche Fréquence Commande
Scraping des offresToutes les 4hphp scripts/cron/scrape_jobs.php
Calcul matching IAAprès scrapingphp scripts/cron/calculate_matches.php
Envoi des alertesToutes les 30minphp scripts/cron/send_alerts.php
NettoyageQuotidien 2hphp scripts/cron/cleanup_expired.php
Vérification offresQuotidienphp scripts/cron/verify_jobs.php
Maintenance SEOQuotidienphp scripts/cron/seo_maintenance.php

Configuration du crontab

# Ouvrir le crontab

crontab -e

# Ajouter la ligne suivante :

0 * * * * cd /chemin/vers/lbc237 && php scripts/cron/master.php

Note : Le master utilise un fichier de verrou (lock file) pour empêcher les exécutions parallèles. Si une tâche semble bloquée, supprimez le fichier .lock dans storage/.

10

Configuration système

La configuration est répartie dans le fichier .env et le dossier config/.

Fichiers de configuration

config/app.php — Sessions, pagination, uploads, rate limit, cache
config/ai.php — Providers IA (OpenAI/Gemini/Groq), modèles, seuils matching
config/database.php — Connexion MySQL
config/payment.php — NotchPay, plans d'abonnement, commission
config/sources.php — Sources de scraping, sélecteurs, mots-clés
config/seo.php — SEO par ville/secteur, templates meta

Variables .env essentielles

APP_ENV=production

APP_DEBUG=false

JWT_SECRET=<64_chars_minimum>

AI_PROVIDER=gemini

AI_API_KEY=<clé_api>

NOTCHPAY_PUBLIC_KEY=<clé>

MAIL_DRIVER=mailgun

VAPID_PUBLIC_KEY=<clé_vapid>

11

Sécurité et maintenance

Mesures de sécurité actives

PDO Prepared Statements (anti-injection SQL)
Bcrypt password hashing
CSRF tokens sur tous les formulaires
Rate limiting (100 req/60s)
Security headers (CSP, X-Frame)
HMAC-SHA256 webhook verification

Checklist de maintenance

  • Vérifier les logs quotidiennement pour les erreurs critiques
  • S'assurer que les backups BDD fonctionnent (dossier database/backups/)
  • Surveiller l'espace disque du dossier storage/
  • Mettre à jour les dépendances Composer régulièrement
  • Vérifier que les crons s'exécutent correctement
  • Tester les webhooks de paiement après toute mise à jour
12

Modération du contenu

Avis entreprises

Les avis déposés par les utilisateurs peuvent être modérés via l'API :

PUT /api/v1/admin/reviews/{id}/moderate
  • Approuver — L'avis reste visible
  • Masquer — L'avis est caché des utilisateurs
  • Signaler — Marquer comme potentiellement inapproprié

Notifications push admin

Consultez les statistiques des notifications push via l'API :

GET /api/v1/admin/push/stats

Inclut : nombre d'appareils abonnés, taux de livraison, taux d'échec, appareils désactivés automatiquement.