fix: gleichnamige Produkte aus verschiedenen Jahrgaengen brechen das Anlegen nicht mehr ab
Product.slug ist eindeutig und zugleich die oeffentliche Adresse
(/honig/<slug>). Ohne eigene Angabe wird er aus dem Namen gebildet. Bei
jahrgangsweise gefuehrtem Honig kollidiert das zwangslaeufig: "Waldhonig"
ergibt in jedem Jahr denselben Slug "waldhonig".
Bisher schlug das als unbehandelte Prisma-Ausnahme (P2002) durch. Statt
einer Meldung erschien die Fehlerseite des Admin-Bereichs, aus der nicht
hervorgeht, dass lediglich die Adresse belegt ist — und das eingegebene
Formular war verloren.
Jetzt wird der Slug vorher geprueft und die Eingabe mit einem konkreten
Vorschlag abgelehnt ("waldhonig-2026"). Das Formular hat fuer genau diesen
Fall bereits ein eigenes Slug-Feld.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
1 parent
479ace1b88
commit
95f5252366
1 file changed
+15
@@ -54,6 +54,21 @@ export async function createProductAction(formData: FormData): Promise<void> {
|
|||||||
// ignoriert statt sich auf eine korrekt ausgefuellte Auswahl zu verlassen.
|
// ignoriert statt sich auf eine korrekt ausgefuellte Auswahl zu verlassen.
|
||||||
const isHoney = category === "HONIG";
|
const isHoney = category === "HONIG";
|
||||||
|
|
||||||
|
// Product.slug ist eindeutig UND zugleich die oeffentliche Adresse
|
||||||
|
// (/honig/<slug>). Ohne eigene Angabe wird er aus dem Namen gebildet — bei
|
||||||
|
// jahrgangsweise gefuehrtem Honig kollidiert das zwangslaeufig: "Waldhonig"
|
||||||
|
// ergibt in jedem Jahr denselben Slug "waldhonig". Ohne diese Behandlung
|
||||||
|
// schlug das als unbehandelte Prisma-Ausnahme (P2002) durch, und statt
|
||||||
|
// einer Meldung erschien die Fehlerseite des Admin-Bereichs — aus der nicht
|
||||||
|
// hervorgeht, dass lediglich die Adresse belegt ist.
|
||||||
|
const slugTaken = await prisma.product.findUnique({ where: { slug }, select: { id: true } });
|
||||||
|
if (slugTaken) {
|
||||||
|
fail(
|
||||||
|
"/admin/produkte/neu",
|
||||||
|
`Die Adresse "${slug}" ist bereits vergeben. Bei gleichnamigen Produkten aus verschiedenen Jahrgaengen im Feld "Slug" eine eigene Adresse eintragen, zum Beispiel "${slug}-${new Date().getFullYear()}".`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const product = await prisma.product.create({
|
const product = await prisma.product.create({
|
||||||
data: {
|
data: {
|
||||||
slug,
|
slug,
|
||||||
|
|||||||
Reference in new issue
Block a user