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.
|
||||
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({
|
||||
data: {
|
||||
slug,
|
||||
|
||||
Reference in new issue
Block a user