edtech / packages /database /seed.ts
CognxSafeTrack
feat(prod): implementation of missing features for production readiness
b150436
/**
* Seed Script — Module 1 : Eco-Moto Business
* Inserts a realistic Track + 3 TrackDays for testing.
* Run: npx ts-node scripts/seed.ts
* Or: add SEED_DATA to whatsapp trigger (handled in whatsapp.ts)
*/
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
console.log('🌱 Seeding database...');
// Upsert Track
const track = await prisma.track.upsert({
where: { id: 'seed-module-1-ecomoto' },
update: {},
create: {
id: 'seed-module-1-ecomoto',
title: 'Lancer son Business – Module 1',
description: 'Formation de 3 jours pour structurer son idée de business et rédiger son pitch.',
duration: 3,
language: 'FR',
isPremium: false,
}
});
console.log(`✅ Track: ${track.title}`);
const days = [
{
dayNumber: 1,
title: 'Jour 1 – Ton idée business',
lessonText: `Bienvenue dans ta formation ! 🎉
Aujourd'hui, on parle de TON idée.
Une bonne idée business répond à un problème réel que les gens autour de toi ont vraiment.
👉 EXEMPLE : La réparation de motos à domicile. Le problème ? Les gens perdent du temps à aller chez le mécanicien. La solution ? Le mécanicien vient à eux.
Pour TON business, réponds à ces 3 questions :
1️⃣ Quel problème tu résous ?
2️⃣ Pour qui ? (femmes, jeunes, commerçants...)
3️⃣ Pourquoi toi et pas un autre ?`,
exerciseType: 'TEXT' as const,
exercisePrompt: '📝 Décris ton idée business en 2-3 phrases. Quel problème tu résous ? Pour qui ?',
validationKeyword: null,
},
{
dayNumber: 2,
title: 'Jour 2 – Tes clients cibles',
lessonText: `Félicitations pour hier ! 🌟
Aujourd'hui : TES CLIENTS.
Beaucoup d'entrepreneurs échouent parce qu'ils veulent vendre à "tout le monde". ❌
La règle d'or : commence par un groupe précis.
👤 EXEMPLE Eco-Moto :
• Qui ? Artisans et commerçants de Dakar
• Âge ? 25-45 ans
• Problème spécifique ? Leur moto tombe en panne et ils perdent des clients
Plus tu connais ton client, plus tu peux lui parler directement.`,
exerciseType: 'TEXT' as const,
exercisePrompt: '📝 Décris ton client cible idéal : Qui est-il ? Quel âge ? Où vit-il ? Quel est son problème principal ?',
validationKeyword: null,
},
{
dayNumber: 3,
title: 'Jour 3 – Ton pitch en 1 minute',
lessonText: `Tu es presque un entrepreneur ! 🚀
Aujourd'hui : TON PITCH.
Un pitch c'est une présentation rapide de ton business. En 60 secondes, tu dois convaincre quelqu'un d'investir ou d'acheter.
📣 STRUCTURE :
1. Le problème (10 sec)
2. Ta solution (10 sec)
3. Tes clients (10 sec)
4. Pourquoi toi (10 sec)
5. Ce que tu demandes (20 sec)
EXEMPLE :
"En Afrique, 60% des motos tombent en panne sans accès rapide à un mécanicien. Eco-Moto envoie un mécanicien qualifié chez vous en moins de 30 minutes. On cible les artisans et commerçants de Dakar qui dépendent de leur moto. On a déjà 50 clients satisfaits. On cherche 500 000 XOF pour acheter nos premiers équipements."`,
exerciseType: 'TEXT' as const,
exercisePrompt: '🎤 Écris ton pitch en utilisant la structure ci-dessus. Sois précis et concis !',
validationKeyword: null,
}
];
for (const day of days) {
const existing = await prisma.trackDay.findFirst({
where: { trackId: track.id, dayNumber: day.dayNumber }
});
if (existing) {
await prisma.trackDay.update({ where: { id: existing.id }, data: day });
console.log(`✅ Updated Day ${day.dayNumber}: ${day.title}`);
} else {
await prisma.trackDay.create({ data: { ...day, trackId: track.id } });
console.log(`✅ Created Day ${day.dayNumber}: ${day.title}`);
}
}
console.log('\n🎉 Seed complete! Track ID:', track.id);
console.log('Send INSCRIPTION + FORMATION on WhatsApp to test.');
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());