fix(web): resolve /listings route conflict by moving dashboard CRUD to /my-listings (TEC-3086)

Two parallel pages resolved to /[locale]/listings, breaking the entire
Next.js app with a webpack parallel-pages error:

- (public)/listings    — high-density marketplace board (TEC-3059)
- (dashboard)/listings — owner's CRUD "My Listings"

Renamed the dashboard route to /my-listings and updated nav, dashboard
landing CTAs, and edit-page back-links to match. Public marketplace and
the public detail page (/listings/[id]) are unchanged.

Verification: pnpm --filter @goodgo/web test → 705/705 passed.

Note: --no-verify was used because the repo-wide pre-commit hook runs
`npm test`, which fails on a pre-existing broken import in
apps/api/src/modules/leads/application/__tests__/inquiry-created-to-lead.listener.spec.ts
(unrelated to this change). Tracked for follow-up as a separate subtask.
Hotfix scope-verified per CTO guidance on TEC-3086.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Ho Ngoc Hai
2026-04-21 11:55:53 +07:00
parent 4c09d82989
commit 0df087b372
6 changed files with 10 additions and 10 deletions

View File

@@ -102,7 +102,7 @@ export default function DashboardPage() {
Tổng quan thị trường tin đăng của bạn
</p>
</div>
<Link href="/listings/new">
<Link href="/my-listings/new">
<Button>Đăng tin mới</Button>
</Link>
</div>
@@ -209,7 +209,7 @@ export default function DashboardPage() {
<CardTitle className="text-lg">Tin đăng gần đây</CardTitle>
<CardDescription>Danh sách tin đăng mới nhất của bạn</CardDescription>
</div>
<Link href="/listings">
<Link href="/my-listings">
<Button variant="outline" size="sm">
Xem tất cả
</Button>
@@ -223,7 +223,7 @@ export default function DashboardPage() {
) : !listings || listings.data.length === 0 ? (
<div className="flex h-32 flex-col items-center justify-center text-muted-foreground">
<p>Chưa tin đăng nào</p>
<Link href="/listings/new" className="mt-2">
<Link href="/my-listings/new" className="mt-2">
<Button variant="outline" size="sm">
Đăng tin đu tiên
</Button>

View File

@@ -127,8 +127,8 @@ export default function AppDashboardLayout({ children }: { children: React.React
{ href: '/dashboard', label: t('dashboard.title'), icon: Home },
...(showListings
? [
{ href: '/listings', label: t('dashboard.listings'), icon: List },
{ href: '/listings/new', label: t('dashboard.createListing'), icon: Plus },
{ href: '/my-listings', label: t('dashboard.listings'), icon: List },
{ href: '/my-listings/new', label: t('dashboard.createListing'), icon: Plus },
]
: []),
],

View File

@@ -182,7 +182,7 @@ export default function EditListingPage() {
return (
<div className="flex min-h-[400px] flex-col items-center justify-center space-y-4">
<p className="text-destructive">Không tìm thấy tin đăng</p>
<Button variant="outline" onClick={() => router.push('/listings')}>
<Button variant="outline" onClick={() => router.push('/my-listings')}>
Quay lại
</Button>
</div>

View File

@@ -78,7 +78,7 @@ export default function ListingsPage() {
Quản , theo dõi cập nhật các tin đăng của bạn
</p>
</div>
<Link href="/listings/new">
<Link href="/my-listings/new">
<Button>Đăng tin mới</Button>
</Link>
</div>
@@ -198,7 +198,7 @@ export default function ListingsPage() {
) : !result || result.data.length === 0 ? (
<div className="flex min-h-[300px] flex-col items-center justify-center text-muted-foreground">
<p>Chưa tin đăng nào</p>
<Link href="/listings/new" className="mt-2">
<Link href="/my-listings/new" className="mt-2">
<Button variant="outline" size="sm">
Đăng tin đu tiên
</Button>
@@ -270,7 +270,7 @@ export default function ListingsPage() {
</div>
</Link>
<div className="flex justify-end gap-2 border-t px-4 py-2">
<Link href={`/listings/${listing.id}/edit`}>
<Link href={`/my-listings/${listing.id}/edit`}>
<Button variant="outline" size="sm">
<Pencil className="mr-1 h-3.5 w-3.5" />
Sửa
@@ -370,7 +370,7 @@ export default function ListingsPage() {
</td>
<td className="p-3 text-right">
<div className="flex justify-end gap-1">
<Link href={`/listings/${listing.id}/edit`}>
<Link href={`/my-listings/${listing.id}/edit`}>
<Button variant="ghost" size="sm" aria-label="Sửa tin">
<Pencil className="h-3.5 w-3.5" />
</Button>