x
This commit is contained in:
1 parent
6f67ee6077
commit
62db477dbd
13 files changed
+660
-98
No files matched your search
@@ -169,12 +169,21 @@ export const pagesRoute = new Elysia({ prefix: "/pages" })
|
||||
})
|
||||
.use(adminOnly)
|
||||
.post("/", async ({ body, set }) => {
|
||||
const data = body;
|
||||
const operation = data?.id ? "update" : "create";
|
||||
try {
|
||||
const data = body;
|
||||
const { id, slug, title, isPublished, status, metadata } = data;
|
||||
if (typeof slug === 'string' && RESERVED_SLUGS.includes(slug.toLowerCase())) {
|
||||
set.status = 400;
|
||||
return { error: "Reserved slug cannot be used" };
|
||||
return {
|
||||
success: false,
|
||||
operation,
|
||||
pageId: id ? Number(id) : null,
|
||||
slug,
|
||||
title,
|
||||
error: "Reserved slug cannot be used",
|
||||
diagnostic: "The requested slug is reserved and cannot be used for dynamic pages."
|
||||
};
|
||||
}
|
||||
let finalIsPublished = true;
|
||||
if (status !== undefined) {
|
||||
@@ -183,22 +192,39 @@ export const pagesRoute = new Elysia({ prefix: "/pages" })
|
||||
else if (isPublished !== undefined) {
|
||||
finalIsPublished = isPublished;
|
||||
}
|
||||
if (id) {
|
||||
return await prisma.page.update({
|
||||
const page = id
|
||||
? await prisma.page.update({
|
||||
where: { id: Number(id) },
|
||||
data: { slug, title, isPublished: finalIsPublished }
|
||||
});
|
||||
}
|
||||
else {
|
||||
return await prisma.page.create({
|
||||
})
|
||||
: await prisma.page.create({
|
||||
data: { slug, title, isPublished: finalIsPublished }
|
||||
});
|
||||
}
|
||||
return {
|
||||
success: true,
|
||||
operation,
|
||||
pageId: page.id,
|
||||
slug: page.slug,
|
||||
title: page.title,
|
||||
isPublished: page.isPublished,
|
||||
page,
|
||||
diagnostic: operation === "create"
|
||||
? "Page created successfully."
|
||||
: "Page updated successfully."
|
||||
};
|
||||
}
|
||||
catch (err) {
|
||||
console.error("[Pages] Error:", err);
|
||||
set.status = 500;
|
||||
return { error: "Failed to save page" };
|
||||
return {
|
||||
success: false,
|
||||
operation,
|
||||
pageId: data?.id ? Number(data.id) : null,
|
||||
slug: data?.slug,
|
||||
title: data?.title,
|
||||
error: "Failed to save page",
|
||||
diagnostic: err instanceof Error ? err.message : "Unexpected error while saving page."
|
||||
};
|
||||
}
|
||||
}, {
|
||||
body: t.Object({
|
||||
@@ -479,4 +505,4 @@ function validateSectionPayload(type, payload) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
//# sourceMappingURL=pages.js.map
|
||||
//# sourceMappingURL=pages.js.map
|
||||
@@ -248,6 +248,66 @@ export const pagesRoute = new Elysia({ prefix: "/pages" })
|
||||
return { ...p, name: trans?.name || p.scent?.name || '', description: trans?.description, details: trans?.details };
|
||||
}
|
||||
});
|
||||
} else if (section.type === 'PRODUCT_CAROUSEL' && !Array.isArray(populatedPayload.products)) {
|
||||
let products: any[] = [];
|
||||
const limit = payload.limit || 3;
|
||||
|
||||
const productInclude = {
|
||||
category: true,
|
||||
scent: true,
|
||||
translations: true,
|
||||
variants: {
|
||||
include: {
|
||||
bomItems: { include: { rawMaterial: true } }
|
||||
},
|
||||
orderBy: { price: "asc" as const }
|
||||
},
|
||||
images: {
|
||||
orderBy: { order: "asc" as const }
|
||||
}
|
||||
};
|
||||
|
||||
if (payload.type === 'featured' || payload.collectionId === 'featured') {
|
||||
products = await prisma.product.findMany({
|
||||
where: { categoryId: 1 },
|
||||
include: productInclude,
|
||||
take: limit
|
||||
});
|
||||
} else if (payload.type === 'scent' && payload.scentId) {
|
||||
products = await prisma.product.findMany({
|
||||
where: { scentId: Number(payload.scentId) },
|
||||
include: productInclude,
|
||||
take: limit
|
||||
});
|
||||
} else if (Array.isArray(payload.productIds)) {
|
||||
const ids = payload.productIds.map(Number);
|
||||
products = await prisma.product.findMany({
|
||||
where: { id: { in: ids } },
|
||||
include: productInclude
|
||||
});
|
||||
products.sort((a, b) => ids.indexOf(a.id) - ids.indexOf(b.id));
|
||||
} else {
|
||||
products = await prisma.product.findMany({
|
||||
include: productInclude,
|
||||
take: limit
|
||||
});
|
||||
}
|
||||
|
||||
populatedPayload.products = products.map((p: any) => {
|
||||
if (lang === 'all') {
|
||||
const nameObj: any = {};
|
||||
const descObj: any = {};
|
||||
const detailsObj: any = {};
|
||||
p.translations?.forEach((t: any) => {
|
||||
nameObj[t.langCode] = t.name;
|
||||
descObj[t.langCode] = t.description;
|
||||
detailsObj[t.langCode] = t.details;
|
||||
});
|
||||
return { ...p, name: nameObj, description: descObj, details: detailsObj };
|
||||
}
|
||||
const trans = p.translations?.find((t: any) => t.langCode === lang) || p.translations?.find((t: any) => t.langCode === 'th') || p.translations?.[0];
|
||||
return { ...p, name: trans?.name || p.scent?.name || '', description: trans?.description, details: trans?.details };
|
||||
});
|
||||
} else if (section.type === 'CATEGORIES') {
|
||||
let categories: any[] = [];
|
||||
if (Array.isArray(payload.categoryIds) && payload.categoryIds.length > 0) {
|
||||
@@ -328,13 +388,22 @@ export const pagesRoute = new Elysia({ prefix: "/pages" })
|
||||
})
|
||||
.use(adminOnly)
|
||||
.post("/", async ({ body, set }) => {
|
||||
const data = body as any;
|
||||
const operation = data?.id ? "update" : "create";
|
||||
try {
|
||||
const data = body as any;
|
||||
const { id, slug, title, isPublished, status, metadata } = data;
|
||||
|
||||
if (typeof slug === 'string' && RESERVED_SLUGS.includes(slug.toLowerCase())) {
|
||||
set.status = 400;
|
||||
return { error: "Reserved slug cannot be used" };
|
||||
return {
|
||||
success: false,
|
||||
operation,
|
||||
pageId: id ? Number(id) : null,
|
||||
slug,
|
||||
title,
|
||||
error: "Reserved slug cannot be used",
|
||||
diagnostic: "The requested slug is reserved and cannot be used for dynamic pages."
|
||||
};
|
||||
}
|
||||
|
||||
let finalIsPublished = true;
|
||||
@@ -344,20 +413,39 @@ export const pagesRoute = new Elysia({ prefix: "/pages" })
|
||||
finalIsPublished = isPublished;
|
||||
}
|
||||
|
||||
if (id) {
|
||||
return await prisma.page.update({
|
||||
const page = id
|
||||
? await prisma.page.update({
|
||||
where: { id: Number(id) },
|
||||
data: { slug, title, isPublished: finalIsPublished }
|
||||
});
|
||||
} else {
|
||||
return await prisma.page.create({
|
||||
})
|
||||
: await prisma.page.create({
|
||||
data: { slug, title, isPublished: finalIsPublished }
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
operation,
|
||||
pageId: page.id,
|
||||
slug: page.slug,
|
||||
title: page.title,
|
||||
isPublished: page.isPublished,
|
||||
page,
|
||||
diagnostic: operation === "create"
|
||||
? "Page created successfully."
|
||||
: "Page updated successfully."
|
||||
};
|
||||
} catch (err) {
|
||||
console.error("[Pages] Error:", err);
|
||||
set.status = 500;
|
||||
return { error: "Failed to save page" };
|
||||
return {
|
||||
success: false,
|
||||
operation,
|
||||
pageId: data?.id ? Number(data.id) : null,
|
||||
slug: data?.slug,
|
||||
title: data?.title,
|
||||
error: "Failed to save page",
|
||||
diagnostic: err instanceof Error ? err.message : "Unexpected error while saving page."
|
||||
};
|
||||
}
|
||||
}, {
|
||||
body: t.Object({
|
||||
|
||||
Reference in new issue
Block a user