SQL and Seed into App

This commit is contained in:
Nick Szaunig committed 2026-08-19 07:26:47 +02:00
1 parent 4ed102afe7
commit 8587265155
9 files changed
+90 -291

No files matched your search

+7 -177
View File
@@ -17,182 +17,14 @@ const prisma: PrismaClient =
? (new MySqlPrismaClient({ adapter }) as unknown as PrismaClient)
: new PrismaClient({ adapter });
/**
* Laeuft automatisch bei jedem Container-Start (siehe Dockerfile-CMD in der
* runner-Stage) — legt/erneuert NUR das Admin-Konto, keine Beispieldaten.
* Ein produktiv gebautes Image soll nie automatisch Fake-Produkte in einer
* echten Datenbank anlegen. Beispieldaten fuer lokales Testen/Screenshots:
* "pnpm db:seed:demo" (prisma/seed-demo.ts), manuell und getrennt.
*/
async function main() {
const fruehtracht = await prisma.harvest.upsert({
where: { slug: "fruehtracht-2026" },
update: {},
create: {
year: 2026,
type: "Frühtracht",
slug: "fruehtracht-2026",
harvestDate: new Date("2026-05-10"),
location: "Altenmünster",
description:
"Die erste Ernte des Jahres entsteht aus dem Nektar von Obstblüte, Raps und Löwenzahn rund um Altenmünster. Mild, floral und feincremig — der Auftakt jeder Wabenhain-Saison.",
images: [],
},
});
const sommertracht = await prisma.harvest.upsert({
where: { slug: "sommertracht-2026" },
update: {},
create: {
year: 2026,
type: "Sommertracht",
slug: "sommertracht-2026",
harvestDate: new Date("2026-07-18"),
location: "Altenmünster",
description:
"Im Hochsommer sammeln unsere Völker Nektar von Linde, Wiesenblumen und Wald. Das Ergebnis ist kräftiger, aromatischer und charaktervoller als die Frühtracht.",
images: [],
},
});
const fhBatch = await prisma.batch.upsert({
where: { code: "FH-26-01" },
update: {},
create: {
code: "FH-26-01",
harvestId: fruehtracht.id,
fillDate: new Date("2026-06-02"),
bestBeforeDate: new Date("2028-06-02"),
glassCount: 200,
remainingGlasses: 167,
},
});
const stBatch = await prisma.batch.upsert({
where: { code: "ST-26-01" },
update: {},
create: {
code: "ST-26-01",
harvestId: sommertracht.id,
fillDate: new Date("2026-08-05"),
bestBeforeDate: new Date("2028-08-05"),
glassCount: 150,
remainingGlasses: 150,
},
});
const fhProduct = await prisma.product.upsert({
where: { slug: "fruehtracht-2026" },
update: { tasteTags: ["mild", "floral", "feincremig"] },
create: {
slug: "fruehtracht-2026",
name: "Frühtracht 2026",
harvestId: fruehtracht.id,
batchId: fhBatch.id,
description:
"Mild, floral und feincremig. Unsere erste Ernte des Jahres aus dem Raum Altenmünster.",
tasteTags: ["mild", "floral", "feincremig"],
intensityMild: 4,
intensityFloral: 4,
intensityKraeftig: 2,
consistency: "feincremig",
weightGrams: 500,
priceCents: 990,
pricePerKgCents: 1980,
images: [],
isActive: true,
},
});
const stProduct = await prisma.product.upsert({
where: { slug: "sommertracht-2026" },
update: { tasteTags: ["kräftig", "aromatisch", "charaktervoll"] },
create: {
slug: "sommertracht-2026",
name: "Sommertracht 2026",
harvestId: sommertracht.id,
batchId: stBatch.id,
description: "Kräftiger, aromatischer und charaktervoller Sommerhonig aus Altenmünster.",
tasteTags: ["kräftig", "aromatisch", "charaktervoll"],
intensityMild: 2,
intensityFloral: 2,
intensityKraeftig: 5,
consistency: "cremig",
weightGrams: 500,
priceCents: 1090,
pricePerKgCents: 2180,
images: [],
isActive: true,
},
});
const candleProduct = await prisma.product.upsert({
where: { slug: "bienenwachskerze-rund" },
update: { tasteTags: ["handgegossen", "reines Bienenwachs", "rußarm"] },
create: {
slug: "bienenwachskerze-rund",
name: "Bienenwachskerze, rund",
category: "KERZEN",
description:
"Handgegossen aus reinem Bienenwachs unserer eigenen Völker. Brennt gleichmäßig, rußarm und verströmt einen dezenten Honigduft.",
tasteTags: ["handgegossen", "reines Bienenwachs", "rußarm"],
consistency: "fest",
weightGrams: 150,
priceCents: 1290,
pricePerKgCents: 8600,
images: [],
isActive: true,
},
});
const propolisProduct = await prisma.product.upsert({
where: { slug: "propolis-tinktur" },
update: { tasteTags: ["schonend verarbeitet", "ohne Zusätze"] },
create: {
slug: "propolis-tinktur",
name: "Propolis-Tinktur",
category: "PROPOLIS",
description:
"Schonend angesetzte Propolis-Tinktur aus dem Harz unserer Bienenstöcke rund um Altenmünster. Ohne synthetische Zusätze.",
tasteTags: ["schonend verarbeitet", "ohne Zusätze"],
consistency: "flüssig",
weightGrams: 30,
priceCents: 1490,
pricePerKgCents: 49666,
images: [],
isActive: true,
},
});
await prisma.inventory.upsert({
where: { productId: fhProduct.id },
update: { quantity: 167 },
create: { productId: fhProduct.id, quantity: 167 },
});
await prisma.inventory.upsert({
where: { productId: stProduct.id },
update: { quantity: 150 },
create: { productId: stProduct.id, quantity: 150 },
});
await prisma.inventory.upsert({
where: { productId: candleProduct.id },
update: { quantity: 60 },
create: { productId: candleProduct.id, quantity: 60 },
});
await prisma.inventory.upsert({
where: { productId: propolisProduct.id },
update: { quantity: 40 },
create: { productId: propolisProduct.id, quantity: 40 },
});
const existingShippingTiers = await prisma.shippingTier.count();
if (existingShippingTiers === 0) {
await prisma.shippingTier.createMany({
data: [
{ minQuantity: 0, maxQuantity: 3, priceCents: 700 },
{ minQuantity: 4, maxQuantity: 9, priceCents: 850 },
{ minQuantity: 10, maxQuantity: 19, priceCents: 1100 },
],
});
console.log("Versandstaffeln angelegt: 0-3=7,00€, 4-9=8,50€, 10-19=11,00€.");
}
const adminEmail = process.env.ADMIN_EMAIL?.trim().toLowerCase();
const adminPassword = process.env.ADMIN_PASSWORD;
@@ -251,8 +83,6 @@ async function main() {
"Siehe README, wie ein bestehendes Konto nachtraeglich zu ADMIN befoerdert wird."
);
}
console.log("Seed abgeschlossen: 2 Ernten, 2 Chargen, 4 Produkte (Honig, Kerzen, Propolis).");
}
main()