feat: ajoute un compte de démo seedé et l'antisèche d'oral
- DemoSeeder : membre demo@cesizen.fr / Demo123! + 18 saisies sur 4 semaines (émotions variées, Joie dominante) pour une démo aux rapports déjà fournis - Antiseche_Oral_CESIZen.md : déroulé 20 min avec démo live intégrée + script Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# 🎯 Antisèche oral CESIZen — à garder sous les yeux
|
||||
|
||||
**20 min de présentation + 10 min Q/R · 16 slides · checkpoint mental à 12:00**
|
||||
**20 min (présentation + démo live de l'app) + 10 min Q/R · 16 slides · checkpoint à 12:30**
|
||||
|
||||
---
|
||||
|
||||
@@ -16,33 +16,35 @@
|
||||
|
||||
---
|
||||
|
||||
## 🗺️ Déroulé (mots-clés seulement)
|
||||
## 🗺️ Déroulé (mots-clés seulement) — démo live intégrée
|
||||
|
||||
**0:00–2:00 · Intro (slides 1-2)**
|
||||
- Qui je suis · commanditaire = Ministère · objet = plateforme grand public santé mentale
|
||||
- Fil rouge : *« recueil → priorisation → réponse fonctionnelle → modélisation → RGPD »*
|
||||
- ➡️ transition : *« Commençons par le contexte. »*
|
||||
- Fil rouge : *« recueil → priorisation → réponse fonctionnelle + démo → modélisation → RGPD »*
|
||||
- ➡️ *« Commençons par le contexte. »*
|
||||
|
||||
**2:00–5:00 · Contexte & parties prenantes (slides 3-4)**
|
||||
**2:00–4:30 · Contexte & parties prenantes (slides 3-4)**
|
||||
- Enjeu sociétal (22 %, stigmatisation) · 4 objectifs stratégiques
|
||||
- Parties prenantes : Ministère ↔ apprenant ↔ HDS ↔ utilisateurs ↔ CNIL
|
||||
- 3 acteurs : Visiteur · Utilisateur connecté · Administrateur
|
||||
- 💬 insister : *« le besoin a été reformulé, pas recopié »*
|
||||
- ➡️ *« De ce besoin, comment ai-je choisi quoi développer ? »*
|
||||
- Parties prenantes : Ministère ↔ apprenant ↔ HDS ↔ utilisateurs ↔ CNIL · 3 acteurs
|
||||
- 💬 *« le besoin a été reformulé, pas recopié »*
|
||||
- ➡️ *« Comment ai-je choisi quoi développer ? »*
|
||||
|
||||
**5:00–7:00 · Besoins & priorisation (slides 5-6)**
|
||||
**4:30–6:00 · Besoins & priorisation (slides 5-6)**
|
||||
- Périmètre : 2 oblig + Tracker · modules écartés **assumés**
|
||||
- Grille pondérée /15 (5 critères) → conclusion : Tracker = plus rentable
|
||||
- ➡️ *« Voyons concrètement la réponse fonctionnelle. »*
|
||||
- Grille pondérée /15 → Tracker = plus rentable
|
||||
- ➡️ *« Voyons la réponse fonctionnelle. »*
|
||||
|
||||
**7:00–12:00 · Réponse fonctionnelle (slides 7-8-9)** ⏱️ *moment clé*
|
||||
- **Comptes** : JWT · RGPD · admin CRUD (+ maquette inscription)
|
||||
- **Informations** : feeds · slug auto · modération (+ maquette)
|
||||
- **Tracker** : wizard 3 étapes · journal · rapports 4 périodes · 6+36 émotions (+ maquettes)
|
||||
**6:00–8:30 · Réponse fonctionnelle Comptes + Informations (slides 7-8)**
|
||||
- **Comptes** : JWT · RGPD · admin CRUD (maquette)
|
||||
- **Informations** : feeds · slug auto · modération (maquette)
|
||||
- ➡️ *« Et pour le Tracker, je vais vous le montrer en direct. »*
|
||||
|
||||
**8:30–12:30 · 🎬 DÉMO LIVE — le Tracker (voir script ci-dessous)**
|
||||
- inscription/connexion → journal → wizard 3 étapes → rapport graphique
|
||||
- 💬 chaque écran = réponse à un besoin précis
|
||||
- ➡️ *« Passons à la modélisation technique. »*
|
||||
- ➡️ *« Voyons maintenant ce qui structure tout ça techniquement. »*
|
||||
|
||||
**12:00–16:00 · Modélisation (slides 10-11-12)** — ⚠️ si retard, accélère ici
|
||||
**12:30–16:00 · Modélisation (slides 10-11-12)** — ⚠️ si retard, accélère ici
|
||||
- **Cas d'usage UML** : couverture par acteur
|
||||
- **MCD Merise** : 8 entités · cardinalités · hiérarchie émotions auto-référencée (parent_id)
|
||||
- **MVC découplé** : 1 API → 2 clients · justif = testabilité, évolutivité, non-duplication
|
||||
@@ -54,15 +56,35 @@
|
||||
- ➡️ *« Tout cela est concrétisé par un prototype. »*
|
||||
|
||||
**17:30–19:00 · Prototype & perspectives (slide 14)**
|
||||
- Stack réelle : Laravel + Next.js + Expo + Docker · 25 tests automatisés
|
||||
- Stack réelle : Laravel + Next.js + Expo + Docker · **25 tests automatisés**
|
||||
- Ouverture : activer les modules écartés sans réécrire · Mon Espace Santé (FHIR) · Open Data
|
||||
|
||||
**19:00–20:00 · Conclusion**
|
||||
- Synthèse en 1 phrase : *besoin reformulé → périmètre priorisé → réponse fonctionnelle → archi pérenne → conformité*
|
||||
- 1 phrase : *besoin reformulé → périmètre priorisé → réponse fonctionnelle → archi pérenne → conformité*
|
||||
- Remercier · *« Je suis à votre disposition pour vos questions. »*
|
||||
|
||||
---
|
||||
|
||||
## 🎬 Script de démo (≈ 4 min) — le Tracker en direct
|
||||
|
||||
**AVANT de commencer l'oral** (à faire pendant l'installation, app déjà lancée) :
|
||||
- `docker compose up -d` lancé · onglet navigateur ouvert sur **http://localhost:3000**
|
||||
- **déjà connecté** sur le compte de démo · zoom navigateur à **125 %** · notifications coupées
|
||||
- Compte : laisser le **journal pré-rempli** de quelques saisies (sinon le rapport est vide)
|
||||
|
||||
**Pendant la démo (chemin balisé, ne pas improviser) :**
|
||||
1. *(20 s)* Page **Informations** publique → *« voici le module Informations, accessible sans compte »*
|
||||
2. *(30 s)* **Journal de bord** → *« le membre retrouve son historique émotionnel »*
|
||||
3. *(90 s)* **Nouvelle saisie** → wizard : Étape 1 émotion (Joie) → Étape 2 sous-émotion + intensité (slider) → Étape 3 date + note → **Valider** → *« elle apparaît immédiatement dans le journal »*
|
||||
4. *(60 s)* **Rapports** → changer la période (semaine → mois) → *« camembert de répartition + courbe d'évolution, calculés côté API »*
|
||||
5. *(20 s, si le temps)* mention rapide **admin** : config des émotions
|
||||
|
||||
🛟 **Filet de sécurité** : si la démo plante, je bascule sur les **maquettes des slides** sans m'excuser → *« je vous montre les écrans clés »*. Zéro stress.
|
||||
|
||||
🔑 Admin seedé : `admin@cesizen.fr` / `Admin123!`
|
||||
|
||||
---
|
||||
|
||||
## ❓ Q/R — réflexes (question → mots-clés de réponse)
|
||||
- **Pourquoi le Tracker ?** → grille /15 en tête · 3 modules aboutis > 6 superficiels · archi extensible
|
||||
- **Pourquoi MVC découplé ?** → 1 API → 2 clients · logique non dupliquée · testable
|
||||
@@ -19,6 +19,7 @@ class DatabaseSeeder extends Seeder
|
||||
AdminSeeder::class,
|
||||
EmotionSeeder::class,
|
||||
FeedSeeder::class,
|
||||
DemoSeeder::class,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Emotion;
|
||||
use App\Models\Role;
|
||||
use App\Models\SaisieTracker;
|
||||
use App\Models\Tracker;
|
||||
use App\Models\Utilisateur;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class DemoSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Compte membre de démonstration + journal pré-rempli.
|
||||
*
|
||||
* Sert à la soutenance : permet de montrer un journal et des rapports
|
||||
* (camembert + courbe) déjà fournis, sans avoir à saisir en direct.
|
||||
* Identifiants : demo@cesizen.fr / Demo123!
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$roleMembre = Role::where('nom', 'membre')->firstOrFail();
|
||||
|
||||
$demo = Utilisateur::firstOrCreate(
|
||||
['email' => 'demo@cesizen.fr'],
|
||||
[
|
||||
'nom' => 'Démo',
|
||||
'prenom' => 'Camille',
|
||||
'email' => 'demo@cesizen.fr',
|
||||
'password' => Hash::make('Demo123!'),
|
||||
'role_id' => $roleMembre->id,
|
||||
'est_actif' => true,
|
||||
'consentement_rgpd' => true,
|
||||
]
|
||||
);
|
||||
|
||||
$tracker = Tracker::firstOrCreate(
|
||||
['utilisateur_id' => $demo->id],
|
||||
['nom' => 'Mon journal']
|
||||
);
|
||||
|
||||
// Idempotent : si le journal de démo est déjà rempli, on ne duplique pas.
|
||||
if (SaisieTracker::where('tracker_id', $tracker->id)->exists()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Émotions de base (niveau 1) -> couleurs distinctes pour un camembert lisible.
|
||||
$emotions = Emotion::where('niveau', 1)->pluck('id', 'nom');
|
||||
|
||||
// 18 saisies réparties sur les 4 dernières semaines (Joie dominante).
|
||||
// [jours avant aujourd'hui, émotion, intensité (1-10), note]
|
||||
$plan = [
|
||||
[25, 'Joie', 7, 'Bonne nouvelle au travail.'],
|
||||
[24, 'Surprise', 6, null],
|
||||
[22, 'Tristesse', 4, 'Journée un peu morose.'],
|
||||
[20, 'Joie', 8, 'Sortie entre amis.'],
|
||||
[19, 'Peur', 5, 'Stress avant une présentation.'],
|
||||
[17, 'Colère', 6, 'Transports en retard.'],
|
||||
[15, 'Joie', 7, null],
|
||||
[14, 'Joie', 9, 'Week-end ressourçant.'],
|
||||
[12, 'Tristesse', 3, null],
|
||||
[11, 'Surprise', 7, 'Visite imprévue.'],
|
||||
[9, 'Peur', 4, null],
|
||||
[8, 'Joie', 8, 'Objectif atteint.'],
|
||||
[6, 'Dégoût', 5, null],
|
||||
[5, 'Joie', 7, 'Belle journée.'],
|
||||
[3, 'Colère', 4, 'Petite contrariété.'],
|
||||
[2, 'Joie', 8, 'Café avec un proche.'],
|
||||
[1, 'Peur', 5, 'Nuit agitée.'],
|
||||
[0, 'Joie', 9, 'Je me sens bien aujourd\'hui.'],
|
||||
];
|
||||
|
||||
foreach ($plan as [$daysAgo, $nom, $intensite, $note]) {
|
||||
SaisieTracker::create([
|
||||
'tracker_id' => $tracker->id,
|
||||
'emotion_id' => $emotions[$nom],
|
||||
'intensite' => $intensite,
|
||||
'note' => $note,
|
||||
'date_saisie' => now()->subDays($daysAgo)->setTime(20, 0),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user