Fix Next dynamic route conflict that crashed the whole site.
Use matching [id] segment names for one- and two-segment user-product paths so standalone no longer throws on every request. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
5a6ef9e0e0
commit
911aa79530
@@ -0,0 +1,27 @@
|
||||
import { notFound, redirect } from "next/navigation";
|
||||
import {
|
||||
getUserProductByIdOrNull,
|
||||
getUserProductBySlugOrNull,
|
||||
userProductHref,
|
||||
} from "@/lib/api/user-products";
|
||||
|
||||
type PageProps = {
|
||||
params: Promise<{ id: string }>;
|
||||
};
|
||||
|
||||
/**
|
||||
* One-segment `/user-products/{idOrLegacySlug}`:
|
||||
* - numeric/id → load by-id and redirect to canonical `/user-products/{id}/{pathSlug}`
|
||||
* - legacy DB slug (e.g. user-product-5) → same redirect
|
||||
*/
|
||||
export default async function UserProductIdRedirect({ params }: PageProps) {
|
||||
const { id } = await params;
|
||||
|
||||
const byId = await getUserProductByIdOrNull(id);
|
||||
if (byId) redirect(userProductHref(byId));
|
||||
|
||||
const bySlug = await getUserProductBySlugOrNull(id);
|
||||
if (bySlug) redirect(userProductHref(bySlug));
|
||||
|
||||
notFound();
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
import { notFound, redirect } from "next/navigation";
|
||||
import {
|
||||
getUserProductBySlugOrNull,
|
||||
userProductHref,
|
||||
} from "@/lib/api/user-products";
|
||||
|
||||
type PageProps = {
|
||||
params: Promise<{ slug: string }>;
|
||||
};
|
||||
|
||||
/** Legacy `/user-products/{db-slug}` → canonical `/user-products/{id}/{pathSlug}`. */
|
||||
export default async function LegacyUserProductRedirect({ params }: PageProps) {
|
||||
const { slug } = await params;
|
||||
const product = await getUserProductBySlugOrNull(slug);
|
||||
if (!product) notFound();
|
||||
redirect(userProductHref(product));
|
||||
}
|
||||
Reference in New Issue
Block a user