feat: extract shop from mp/shop — initial libreshop/shop
Some checks failed
Build and publish / build (push) Failing after 19s
Some checks failed
Build and publish / build (push) Failing after 19s
Source moved verbatim from mp/shop/ on 2026-04-29; mp was the first concrete adapter consuming the libreshop toolkit. Builds and publishes git.librete.ch/libreshop/shop on every main / v* push via the standard .gitea/workflows/build.yml shared across libreshop components.
This commit is contained in:
10
server/api/products/[id]/variants.get.ts
Normal file
10
server/api/products/[id]/variants.get.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { fetchCms } from "~/server/utils/cmsApi";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const id = getRouterParam(event, "id");
|
||||
if (!id) {
|
||||
throw createError({ statusCode: 400, statusMessage: "Missing product ID" });
|
||||
}
|
||||
|
||||
return await fetchCms(`/products/${id}/variants`);
|
||||
});
|
||||
10
server/api/products/[id]/variants/pattern.get.ts
Normal file
10
server/api/products/[id]/variants/pattern.get.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { fetchCms } from "~/server/utils/cmsApi";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const id = getRouterParam(event, "id");
|
||||
if (!id) {
|
||||
throw createError({ statusCode: 400, statusMessage: "Missing product ID" });
|
||||
}
|
||||
|
||||
return await fetchCms(`/products/${id}/variants/pattern`);
|
||||
});
|
||||
12
server/api/products/index.get.ts
Normal file
12
server/api/products/index.get.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { fetchCms } from "~/server/utils/cmsApi";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const query = getQuery(event);
|
||||
|
||||
const params = new URLSearchParams();
|
||||
if (query.cover) params.append("filters[cover]", String(query.cover));
|
||||
params.append("pagination[page]", String(query.page || 1));
|
||||
params.append("pagination[pageSize]", String(query.pageSize || 24));
|
||||
|
||||
return await fetchCms(`/products?${params}`);
|
||||
});
|
||||
21
server/api/products/promo.get.ts
Normal file
21
server/api/products/promo.get.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import { fetchCms } from "~/server/utils/cmsApi";
|
||||
import { resolveCoverId } from "~/server/utils/coverSlug";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const query = getQuery(event);
|
||||
|
||||
const params = new URLSearchParams();
|
||||
|
||||
// Resolve cover slug to ID if provided
|
||||
if (query.cover) {
|
||||
const coverId = await resolveCoverId(String(query.cover));
|
||||
if (coverId) {
|
||||
params.append("filters[cover]", coverId);
|
||||
}
|
||||
}
|
||||
|
||||
params.append("pagination[page]", String(query.page || 1));
|
||||
params.append("pagination[pageSize]", String(query.pageSize || 24));
|
||||
|
||||
return await fetchCms(`/promo-products?${params}`);
|
||||
});
|
||||
Reference in New Issue
Block a user