Wave 6, the last substantive piece of the mock-API migration. Wave 1 removed the brand facet and the sales/comments sorts for want of a model; sales turn out to be derivable from order_items and a brand model is a table plus a column. - a `brands` table with a nullable `products.brand_id` and an ordered admin replace, mirroring categories and storefront content; a public `GET /api/brands` and a `brand_id` filter on the catalog, which the search page's facet uses - `sold_count` per product, computed from `order_items` joined to orders that reached payment, so an abandoned or cancelled checkout cannot count as a sale. It is computed per read rather than stored, so it cannot drift from the orders that produced it - `sort=sales` alongside `sort=price`; anything else is still a 400 - merchants can set a product's brand through the existing product upsert - the review UI is gone: the card's review figure and the product detail page's reviews tab, summary and replies. There is no reviews model, and the mall attributed invented comments to named shoppers and showed a "good rate". The now-unreferenced fabrication helpers went with it (`salesOf`, `commentCountOf`, `commentsFor`, `commentStats`, `salesRankFor`, `productDetail`, `storeDetail`) Two bugs found by checking rather than trusting: the fixed-data `listProducts` had silently ignored `brand_id`, `sort` and `order`, so the restored facet rendered but filtered nothing until the rollback check caught it; and the seed's brand lookup read back through the shared `r` variable the product loop reassigns, working once and then throwing. Verified: 29 backend tests green including a new brand-and-sales case; all three frontends build; searching filters by brand (24 to 6) and sorts by sales with counts matching the API; a product page offers detail and after-sale tabs only, with a real sold count; the fixed-data rollback filters by brand too. OpenSpec change: openspec/changes/replace-mock-api-wave-6
28 lines
961 B
TypeScript
28 lines
961 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 and waves 2-3.
|
|
liveDomains: ["catalog", "currency", "content", "shops", "brands", "auth", "cart", "orders", "shipments", "invoices"],
|
|
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",
|
|
});
|