This commit is contained in:
gpatruno
2026-06-11 17:30:13 +02:00
parent 36b4acb355
commit e45e9f154e
108 changed files with 9163 additions and 167 deletions
+178
View File
@@ -0,0 +1,178 @@
import "dotenv/config";
import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
import { PrismaClient } from "../src/generated/prisma/client";
import { hashPassword } from "../src/lib/password";
import { DEFAULT_PUBLIC_SITE_COPY } from "../src/lib/site-content-defaults";
import { WAFFLE_CATEGORIES } from "../src/lib/constants";
import { formatDateIso } from "../src/lib/week-calendar";
const url = process.env.DATABASE_URL ?? "file:./dev.db";
const adapter = new PrismaBetterSqlite3({ url });
const prisma = new PrismaClient({ adapter });
async function main() {
const email =
process.env.ADMIN_EMAIL?.trim().toLowerCase() || "admin@lagaufredor.local";
const password = process.env.ADMIN_PASSWORD || "changeme123";
const existing = await prisma.user.findUnique({ where: { email } });
if (!existing) {
await prisma.user.create({
data: {
email,
passwordHash: await hashPassword(password),
},
});
console.log(
`Compte admin créé : ${email} (mot de passe : variable ADMIN_PASSWORD ou défaut changeme123)`
);
}
const count = await prisma.waffle.count();
if (count === 0) {
await prisma.waffle.createMany({
data: [
{
name: "Coco-Belge",
ingredients:
"Pâte Liège, perles de sucre, noix de coco râpée, touche de vanille Bourbon.",
price: 6.5,
isNew: true,
category: WAFFLE_CATEGORIES.DU_MOIS,
imageUrl: "/gallery/hero-coco.png",
},
{
name: "Classique dorée",
ingredients: "Sucre perlé, beurre AOP, sirop d’érable ou chocolat.",
price: 5.9,
isNew: false,
category: WAFFLE_CATEGORIES.SUCREE,
imageUrl: "/gallery/gaufres-sucrees.png",
},
{
name: "Bubble chantilly",
ingredients: "Bubble waffle, chantilly maison, copeaux de chocolat noir.",
price: 7.2,
isNew: false,
category: WAFFLE_CATEGORIES.SUCREE,
imageUrl: "/gallery/bubble-waffle.png",
},
{
name: "Montagnarde",
ingredients:
"Pâte aux herbes, comté fondant, jambon cru, poivre noir concassé.",
price: 8.5,
isNew: false,
category: WAFFLE_CATEGORIES.SALEE,
imageUrl: "/gallery/gaufre-salee.png",
},
{
name: "Bacon & ciboulette",
ingredients: "Crème légère, bacon croustillant, ciboulette fraîche.",
price: 7.9,
isNew: false,
category: WAFFLE_CATEGORIES.SALEE,
imageUrl: "/gallery/gaufre-salee.png",
},
],
});
console.log("Gaufres dexemple insérées.");
}
const galleryCount = await prisma.galleryImage.count();
if (galleryCount === 0) {
await prisma.galleryImage.createMany({
data: [
{
imageUrl: "/gallery/hero-coco.png",
alt: "Gaufres belges caramélisées sur ardoise, noix de coco et drapeau belge.",
sortOrder: 0,
},
{
imageUrl: "/gallery/gaufres-sucrees.png",
alt: "Stack de gaufres dorées, sucre glace et sirop.",
sortOrder: 1,
},
{
imageUrl: "/gallery/bubble-waffle.png",
alt: "Bubble waffles en cornet, chantilly et chocolat.",
sortOrder: 2,
},
{
imageUrl: "/gallery/gaufre-salee.png",
alt: "Gaufre salée aux herbes, crème, bacon et ciboulette.",
sortOrder: 3,
},
],
});
console.log("Galerie dexemple insérée.");
}
await prisma.siteContent.upsert({
where: { id: "default" },
create: {
id: "default",
...DEFAULT_PUBLIC_SITE_COPY,
},
update: {},
});
const truckCount = await prisma.truckEvent.count();
if (truckCount === 0) {
const start = new Date();
const day = start.getDay();
const diff = day === 0 ? -6 : 1 - day;
start.setDate(start.getDate() + diff);
const dateAt = (offset: number) => {
const d = new Date(start);
d.setDate(start.getDate() + offset);
return formatDateIso(d);
};
await prisma.truckEvent.createMany({
data: [
{
eventDate: dateAt(1),
timeLabel: "9h — 13h",
location: "Marché de Bagnols-sur-Cèze",
note: "Place du marché",
},
{
eventDate: dateAt(3),
timeLabel: "11h — 19h",
location: "Festival gourmand — Uzès",
note: "",
},
{
eventDate: dateAt(5),
timeLabel: "10h — 18h",
location: "Place de la République, Alès",
note: "Food truck zone nord",
},
],
});
console.log("Événements food truck dexemple insérés.");
}
const recurCount = await prisma.truckEventRecurrence.count();
if (recurCount === 0) {
await prisma.truckEventRecurrence.create({
data: {
dayOfWeek: 1,
timeLabel: "9h — 13h",
location: "Marché hebdomadaire — Bagnols-sur-Cèze",
note: "Place du marché",
},
});
console.log("Récurrence food truck dexemple insérée.");
}
}
main()
.then(() => prisma.$disconnect())
.catch((e) => {
console.error(e);
prisma.$disconnect();
process.exit(1);
});