Wave 1 of replacing the fixed-data mock adapter. The mall now selects its API adapter per domain, with catalog and currency served live while auth, cart, orders, shipments and invoices stay on fixed data. Backend: - seed the 6 x 2 x 2 category tree as reference data (migration 0005). The API exposes no category write route, so this cannot come from the seed script - filter public product listing by the category subtree with a recursive CTE, matching the mock's existing behaviour instead of exact-match - add sort=price with order=asc|desc, validated by hand so an unsupported value returns the project's ApiError 400 shape rather than axum's own rejection Mall: - replace the all-or-nothing mockApi boolean with a liveDomains list composed through a typed per-domain pick map - source home floors, the category menu, search and product detail from the catalog API; banners, promos, quick links, store card and comment/coupon content stay local display-only content - drop the brand facet and the sales/comments sorts: no backend model backs them - fix salesOf/commentCountOf, which parsed digits out of the product id and so rendered "NaN sold" for live UUID ids; they now hash the id Seed: 24 products across 4 shops, idempotent on re-run. Note: the mall defaults to a live catalog, so pnpm dev:mall now expects the API to be running; set NUXT_PUBLIC_LIVE_DOMAINS to an empty array for all-mock work. OpenSpec change: openspec/changes/replace-mock-api-wave-1
28 lines
866 B
TypeScript
28 lines
866 B
TypeScript
export default defineNuxtConfig({
|
|
modules: ["@pinia/nuxt", "@nuxtjs/i18n"],
|
|
css: ["@vmall/shared/ui.css", "~/assets/mall.css"],
|
|
devtools: { enabled: false },
|
|
devServer: { port: 3000 },
|
|
runtimeConfig: {
|
|
public: {
|
|
apiBase: "http://localhost:8080/api",
|
|
// Domains served by the live backend; every other domain stays on the
|
|
// fixed-data adapter. Override with NUXT_PUBLIC_LIVE_DOMAINS='["catalog"]'.
|
|
// See openspec/changes/replace-mock-api-wave-1/design.md.
|
|
liveDomains: ["catalog", "currency"],
|
|
appName: "mall",
|
|
},
|
|
},
|
|
i18n: {
|
|
strategy: "no_prefix",
|
|
defaultLocale: "en",
|
|
locales: [
|
|
{ code: "en", name: "English" },
|
|
{ code: "zh", name: "中文" },
|
|
],
|
|
vueI18n: "../i18n.config.ts",
|
|
bundle: { optimizeTranslationDirective: false },
|
|
},
|
|
compatibilityDate: "2025-01-01",
|
|
});
|