Files
HytaleMMORPG/prisma/seed.ts
T
gpatruno e45e9f154e update
2026-06-11 17:30:13 +02:00

179 lines
5.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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);
});