import "dotenv/config"; import { PrismaClient } from "@prisma/client"; import { PrismaPg } from "@prisma/adapter-pg"; import argon2 from "argon2"; const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }); const prisma = new PrismaClient({ adapter }); async function main() { console.log("🌱 Seed en cours..."); // ── Admin ────────────────────────────────────────────────────────────────── const adminPassword = await argon2.hash("admin1234"); const admin = await prisma.user.upsert({ where: { email: "admin@pulseform.app" }, update: {}, create: { username: "admin", email: "admin@pulseform.app", password: adminPassword, role: "ADMIN", }, }); console.log(`βœ… Admin : ${admin.email}`); // ── Exercices ────────────────────────────────────────────────────────────── const exercisesData = [ { name: "Squat", description: "Flexion des jambes, dos droit.", difficulty: "BEGINNER" as const, muscleGroups: ["Legs", "Glutes"] }, { name: "Squat sautΓ©", description: "Squat avec impulsion vers le haut.", difficulty: "INTERMEDIATE" as const, muscleGroups: ["Legs", "Glutes"] }, { name: "Fente avant", description: "Pas en avant, genou Γ  90Β°.", difficulty: "BEGINNER" as const, muscleGroups: ["Legs", "Glutes"] }, { name: "Pompes", description: "Bras Γ  largeur d'Γ©paules, corps droit.", difficulty: "BEGINNER" as const, muscleGroups: ["Chest", "Arms"] }, { name: "Pompes diamant", description: "Mains proches, triceps sollicitΓ©s.", difficulty: "INTERMEDIATE" as const, muscleGroups: ["Arms", "Chest"] }, { name: "Dips", description: "Sur une chaise ou barre parallΓ¨le.", difficulty: "INTERMEDIATE" as const, muscleGroups: ["Arms", "Chest"] }, { name: "Traction", description: "Barre fixe, prise pronation.", difficulty: "ADVANCED" as const, muscleGroups: ["Back", "Arms"] }, { name: "Rowing inclinΓ©", description: "HaltΓ¨re, dos Γ  45Β°.", difficulty: "INTERMEDIATE" as const, muscleGroups: ["Back"] }, { name: "Planche", description: "Corps droit, abdos contractΓ©s.", difficulty: "BEGINNER" as const, muscleGroups: ["Abdominals"] }, { name: "Crunch", description: "Soulever les Γ©paules, pas le dos.", difficulty: "BEGINNER" as const, muscleGroups: ["Abdominals"] }, { name: "Mountain climber", description: "Alterner genoux vers la poitrine.", difficulty: "INTERMEDIATE" as const, muscleGroups: ["Abdominals", "Legs"] }, { name: "Burpee", description: "Pompe + saut, exercice full body.", difficulty: "ADVANCED" as const, muscleGroups: ["Legs", "Chest", "Arms"] }, ]; await prisma.exercise.createMany({ data: exercisesData, skipDuplicates: true }); const exercises = await prisma.exercise.findMany(); console.log(`βœ… ${exercises.length} exercices`); // ── Programme dΓ©butant ───────────────────────────────────────────────────── const squat = exercises.find((e) => e.name === "Squat")!; const pompes = exercises.find((e) => e.name === "Pompes")!; const planche = exercises.find((e) => e.name === "Planche")!; const crunch = exercises.find((e) => e.name === "Crunch")!; const fente = exercises.find((e) => e.name === "Fente avant")!; await prisma.program.upsert({ where: { id: "00000000-0000-0000-0000-000000000001" }, update: {}, create: { id: "00000000-0000-0000-0000-000000000001", name: "Full Body DΓ©butant", description: "Programme complet pour commencer sans Γ©quipement.", isPublic: true, authorId: admin.id, exercises: { create: [ { exerciseId: squat.id!, sets: 3, reps: 12, order: 0 }, { exerciseId: pompes.id!, sets: 3, reps: 10, order: 1 }, { exerciseId: fente.id!, sets: 3, reps: 10, order: 2 }, { exerciseId: planche.id!, sets: 3, durationSec: 30, order: 3 }, { exerciseId: crunch.id!, sets: 3, reps: 15, order: 4 }, ], }, }, }); console.log("βœ… Programme : Full Body DΓ©butant"); // ── Programme intermΓ©diaire ──────────────────────────────────────────────── const burpee = exercises.find((e) => e.name === "Burpee")!; const mountain = exercises.find((e) => e.name === "Mountain climber")!; const squatSaute = exercises.find((e) => e.name === "Squat sautΓ©")!; await prisma.program.upsert({ where: { id: "00000000-0000-0000-0000-000000000002" }, update: {}, create: { id: "00000000-0000-0000-0000-000000000002", name: "Cardio IntermΓ©diaire", description: "Circuit cardio sans Γ©quipement, intensitΓ© modΓ©rΓ©e.", isPublic: true, authorId: admin.id, exercises: { create: [ { exerciseId: burpee.id!, sets: 4, reps: 8, order: 0 }, { exerciseId: squatSaute.id!, sets: 4, reps: 12, order: 1 }, { exerciseId: mountain.id!, sets: 4, durationSec: 30, order: 2 }, { exerciseId: pompes.id!, sets: 4, reps: 12, order: 3 }, ], }, }, }); console.log("βœ… Programme : Cardio IntermΓ©diaire"); console.log("πŸŽ‰ Seed terminΓ©."); } main() .catch((e) => { console.error(e); process.exit(1); }) .finally(() => prisma.$disconnect());