This commit is contained in:
Your Name committed 2026-10-10 08:00:56 +07:00
1 parent 943fd8f1a3
commit 9237c0eded
7 files changed
+776 -377

No files matched your search

+114 -8
View File
@@ -189,6 +189,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
const mobileHeaderBehavior = (settings.themeTokens as any)?.mobileHeaderBehavior ?? headerBehavior;
const mobileHeaderStyle = (settings.themeTokens as any)?.mobileHeaderStyle ?? 'logo_center';
const cardPreset = (settings.themeTokens as any)?.cardPreset ?? 'standard';
const headerShowSearch = (settings.themeTokens as any)?.headerShowSearch ?? true;
const headerShowWishlist = (settings.themeTokens as any)?.headerShowWishlist ?? true;
const headerShowCart = (settings.themeTokens as any)?.headerShowCart ?? true;
const headerShowTrackOrder = (settings.themeTokens as any)?.headerShowTrackOrder ?? true;
const headerShowLanguage = (settings.themeTokens as any)?.headerShowLanguage ?? true;
const headerShowAccount = (settings.themeTokens as any)?.headerShowAccount ?? true;
return {
...settingsData,
footerLayout: normalizeFooterLayoutSettings((settingsData as any).footerLayout),
@@ -197,6 +203,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
mobileHeaderBehavior,
mobileHeaderStyle,
cardPreset,
headerShowSearch,
headerShowWishlist,
headerShowCart,
headerShowTrackOrder,
headerShowLanguage,
headerShowAccount,
footerDescription: localizedDescription ?? settingsData.footerDescription,
defaultSeoTitle: localizedSeoTitle ?? settingsData.defaultSeoTitle,
defaultSeoDescription: localizedSeoDescription ?? settingsData.defaultSeoDescription,
@@ -371,15 +383,33 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
}, { beforeHandle: requireAdmin, body: t.Any() })
.put("/", async ({ body, set }: { body: any; set: any }) => {
try {
const { footerLayout, headerBehavior, mobileHeaderBehavior, mobileHeaderStyle, cardPreset, translations, ...data } = body as any;
const {
footerLayout,
headerBehavior,
mobileHeaderBehavior,
mobileHeaderStyle,
headerShowSearch,
headerShowWishlist,
headerShowCart,
headerShowTrackOrder,
headerShowLanguage,
headerShowAccount,
cardPreset,
translations,
...data
} = body as any;
if (footerLayout !== undefined) {
set.status = 400;
return { error: "Use PATCH /settings/footer-layout to update footer layout" };
}
const currentTokens = (typeof data.themeTokens === 'object' && data.themeTokens !== null)
let settings = await prisma.storeSettings.findFirst({ include: { translations: true } });
const existingTokens = (typeof (settings as any)?.themeTokens === 'object' && (settings as any)?.themeTokens !== null)
? (settings as any).themeTokens
: {};
const passedTokens = (typeof data.themeTokens === 'object' && data.themeTokens !== null)
? data.themeTokens
: {};
const updatedTokens = { ...currentTokens };
const updatedTokens = { ...existingTokens, ...passedTokens };
if (headerBehavior !== undefined) {
updatedTokens.headerBehavior = headerBehavior;
}
@@ -389,12 +419,29 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
if (mobileHeaderStyle !== undefined) {
updatedTokens.mobileHeaderStyle = mobileHeaderStyle;
}
if (headerShowSearch !== undefined) {
updatedTokens.headerShowSearch = headerShowSearch;
}
if (headerShowWishlist !== undefined) {
updatedTokens.headerShowWishlist = headerShowWishlist;
}
if (headerShowCart !== undefined) {
updatedTokens.headerShowCart = headerShowCart;
}
if (headerShowTrackOrder !== undefined) {
updatedTokens.headerShowTrackOrder = headerShowTrackOrder;
}
if (headerShowLanguage !== undefined) {
updatedTokens.headerShowLanguage = headerShowLanguage;
}
if (headerShowAccount !== undefined) {
updatedTokens.headerShowAccount = headerShowAccount;
}
if (cardPreset !== undefined) {
updatedTokens.cardPreset = cardPreset;
}
data.themeTokens = updatedTokens;
let settings = await prisma.storeSettings.findFirst({ include: { translations: true } });
if (!settings) {
settings = await prisma.storeSettings.create({ data, include: { translations: true } });
} else {
@@ -422,6 +469,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
mobileHeaderBehavior: returnedMobileBehavior,
mobileHeaderStyle: returnedMobileStyle,
cardPreset: returnedCardPreset,
headerShowSearch: (settings?.themeTokens as any)?.headerShowSearch ?? true,
headerShowWishlist: (settings?.themeTokens as any)?.headerShowWishlist ?? true,
headerShowCart: (settings?.themeTokens as any)?.headerShowCart ?? true,
headerShowTrackOrder: (settings?.themeTokens as any)?.headerShowTrackOrder ?? true,
headerShowLanguage: (settings?.themeTokens as any)?.headerShowLanguage ?? true,
headerShowAccount: (settings?.themeTokens as any)?.headerShowAccount ?? true,
};
} catch (err) {
console.error("[Settings] Error:", err);
@@ -456,6 +509,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
headerBehavior: t.Optional(t.String()),
mobileHeaderBehavior: t.Optional(t.String()),
mobileHeaderStyle: t.Optional(t.String()),
headerShowSearch: t.Optional(t.Boolean()),
headerShowWishlist: t.Optional(t.Boolean()),
headerShowCart: t.Optional(t.Boolean()),
headerShowTrackOrder: t.Optional(t.Boolean()),
headerShowLanguage: t.Optional(t.Boolean()),
headerShowAccount: t.Optional(t.Boolean()),
cardPreset: t.Optional(t.String()),
defaultSeoTitle: t.Optional(t.Nullable(t.String())),
defaultSeoDescription: t.Optional(t.Nullable(t.String())),
@@ -467,15 +526,33 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
})
.post("/", async ({ body, set }: { body: any; set: any }) => {
try {
const { footerLayout, headerBehavior, mobileHeaderBehavior, mobileHeaderStyle, cardPreset, translations, ...data } = body as any;
const {
footerLayout,
headerBehavior,
mobileHeaderBehavior,
mobileHeaderStyle,
headerShowSearch,
headerShowWishlist,
headerShowCart,
headerShowTrackOrder,
headerShowLanguage,
headerShowAccount,
cardPreset,
translations,
...data
} = body as any;
if (footerLayout !== undefined) {
set.status = 400;
return { error: "Use PATCH /settings/footer-layout to update footer layout" };
}
const currentTokens = (typeof data.themeTokens === 'object' && data.themeTokens !== null)
let settings = await prisma.storeSettings.findFirst({ include: { translations: true } });
const existingTokens = (typeof (settings as any)?.themeTokens === 'object' && (settings as any)?.themeTokens !== null)
? (settings as any).themeTokens
: {};
const passedTokens = (typeof data.themeTokens === 'object' && data.themeTokens !== null)
? data.themeTokens
: {};
const updatedTokens = { ...currentTokens };
const updatedTokens = { ...existingTokens, ...passedTokens };
if (headerBehavior !== undefined) {
updatedTokens.headerBehavior = headerBehavior;
}
@@ -485,12 +562,29 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
if (mobileHeaderStyle !== undefined) {
updatedTokens.mobileHeaderStyle = mobileHeaderStyle;
}
if (headerShowSearch !== undefined) {
updatedTokens.headerShowSearch = headerShowSearch;
}
if (headerShowWishlist !== undefined) {
updatedTokens.headerShowWishlist = headerShowWishlist;
}
if (headerShowCart !== undefined) {
updatedTokens.headerShowCart = headerShowCart;
}
if (headerShowTrackOrder !== undefined) {
updatedTokens.headerShowTrackOrder = headerShowTrackOrder;
}
if (headerShowLanguage !== undefined) {
updatedTokens.headerShowLanguage = headerShowLanguage;
}
if (headerShowAccount !== undefined) {
updatedTokens.headerShowAccount = headerShowAccount;
}
if (cardPreset !== undefined) {
updatedTokens.cardPreset = cardPreset;
}
data.themeTokens = updatedTokens;
let settings = await prisma.storeSettings.findFirst({ include: { translations: true } });
if (!settings) {
settings = await prisma.storeSettings.create({ data, include: { translations: true } });
} else {
@@ -518,6 +612,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
mobileHeaderBehavior: returnedMobileBehavior,
mobileHeaderStyle: returnedMobileStyle,
cardPreset: returnedCardPreset,
headerShowSearch: (settings?.themeTokens as any)?.headerShowSearch ?? true,
headerShowWishlist: (settings?.themeTokens as any)?.headerShowWishlist ?? true,
headerShowCart: (settings?.themeTokens as any)?.headerShowCart ?? true,
headerShowTrackOrder: (settings?.themeTokens as any)?.headerShowTrackOrder ?? true,
headerShowLanguage: (settings?.themeTokens as any)?.headerShowLanguage ?? true,
headerShowAccount: (settings?.themeTokens as any)?.headerShowAccount ?? true,
};
} catch (err) {
console.error("[Settings] Error:", err);
@@ -552,6 +652,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
headerBehavior: t.Optional(t.String()),
mobileHeaderBehavior: t.Optional(t.String()),
mobileHeaderStyle: t.Optional(t.String()),
headerShowSearch: t.Optional(t.Boolean()),
headerShowWishlist: t.Optional(t.Boolean()),
headerShowCart: t.Optional(t.Boolean()),
headerShowTrackOrder: t.Optional(t.Boolean()),
headerShowLanguage: t.Optional(t.Boolean()),
headerShowAccount: t.Optional(t.Boolean()),
cardPreset: t.Optional(t.String()),
defaultSeoTitle: t.Optional(t.Nullable(t.String())),
defaultSeoDescription: t.Optional(t.Nullable(t.String())),