diff --git a/server/api/public/settings.get.ts b/server/api/public/settings.get.ts index af1c9ee..4995afd 100644 --- a/server/api/public/settings.get.ts +++ b/server/api/public/settings.get.ts @@ -1,45 +1,25 @@ -import { z } from 'zod'; -import { type GeneralSettings } from '~~/shared/schemas/setting'; +import { + type SEOConfig, + type CareerSiteConfig, +} from '~~/shared/schemas/setting'; import { settings_memoryStorage } from '~~/server/utils/storage'; -const settingsLookupSchema = z.object({ - config: z.enum(['seoConfig', 'careerSiteConfig']).optional(), -}); - -export default defineEventHandler(async (event) => { - const query = await getValidatedQuery(event, settingsLookupSchema.parse); - const queries = query.config - ? [query.config] - : ['seoConfig', 'careerSiteConfig']; - +export default defineEventHandler(async () => { if (IS_DEV) { - console.log('fetching public settings. queries:', queries); + console.log('fetching public settings'); } - const settings: GeneralSettings = { + const settings = { careerSite: {}, seo: {}, - } as GeneralSettings; // Ignore validation errors here. + } as { careerSite: CareerSiteConfig; seo: SEOConfig }; - for (let index = 0; index < queries.length; index++) { - const query = queries[index]; - let value: any; - switch (query) { - case 'seoConfig': - value = await settings_memoryStorage.getItem(query); - settings.seo = value as GeneralSettings['seo']; - break; - case 'careerSiteConfig': - value = await settings_memoryStorage.getItem(query); - settings.careerSite = value as GeneralSettings['careerSite']; - break; - default: - throw createError({ - statusCode: 404, - statusMessage: `no config with key ${query} found`, - }); - } - } + settings.seo = (await settings_memoryStorage.getItem( + 'seoConfig' + )) as SEOConfig; + settings.careerSite = (await settings_memoryStorage.getItem( + 'careerSiteConfig' + )) as CareerSiteConfig; return settings; }); diff --git a/server/api/settings/career-site.get.ts b/server/api/settings/career-site.get.ts new file mode 100644 index 0000000..955cb0d --- /dev/null +++ b/server/api/settings/career-site.get.ts @@ -0,0 +1,10 @@ +import { type CareerSiteConfig } from '~~/shared/schemas/setting'; +import authenticateAdminRequest from '~~/server/utils/admin'; + +export default defineEventHandler(async (event) => { + await authenticateAdminRequest(event); + + return (await settings_memoryStorage.getItem( + 'careerSiteConfig' + )) as CareerSiteConfig; +}); diff --git a/server/api/settings/career-site.put.ts b/server/api/settings/career-site.put.ts new file mode 100644 index 0000000..6c246ae --- /dev/null +++ b/server/api/settings/career-site.put.ts @@ -0,0 +1,27 @@ +import { eq } from 'drizzle-orm'; +import { careerSiteConfigSchema } from '~~/shared/schemas/setting'; +import { metaDataTable } from '~~/server/db/schema'; +import authenticateAdminRequest from '~~/server/utils/admin'; +import { settings_memoryStorage } from '~~/server/utils/storage'; + +export default defineEventHandler(async (event) => { + await authenticateAdminRequest(event); + + if (IS_DEV) { + console.log('updating careerSiteConfig'); + } + + const settingsUpdateRequest = await readValidatedBody( + event, + careerSiteConfigSchema.parse + ); + + const db = await useDatabase(); + + const careerSiteString = JSON.stringify(settingsUpdateRequest); + await db + .update(metaDataTable) + .set({ value: careerSiteString, updatedAt: new Date() }) + .where(eq(metaDataTable.key, 'careerSiteConfig')); + settings_memoryStorage.setItem('careerSiteConfig', settingsUpdateRequest); +}); diff --git a/server/api/settings/general.get.ts b/server/api/settings/general.get.ts deleted file mode 100644 index a2e2354..0000000 --- a/server/api/settings/general.get.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { z } from 'zod'; -import { type GeneralSettings } from '~~/shared/schemas/setting'; -import authenticateAdminRequest from '~~/server/utils/admin'; -import { settings_memoryStorage } from '~~/server/utils/storage'; - -const settingsLookupSchema = z.object({ - config: z.enum(['seoConfig', 'careerSiteConfig']).optional(), -}); - -export default defineEventHandler(async (event) => { - await authenticateAdminRequest(event); - - const query = await getValidatedQuery(event, settingsLookupSchema.parse); - const queries = query.config - ? [query.config] - : ['seoConfig', 'careerSiteConfig']; - - const settings: GeneralSettings = { - careerSite: {}, - seo: {}, - } as GeneralSettings; // Ignore validation errors here. - - for (let index = 0; index < queries.length; index++) { - const query = queries[index]; - let value: any; - switch (query) { - case 'seoConfig': - value = await settings_memoryStorage.getItem(query); - settings.seo = value as GeneralSettings['seo']; - break; - case 'careerSiteConfig': - value = await settings_memoryStorage.getItem(query); - settings.careerSite = value as GeneralSettings['careerSite']; - break; - default: - throw createError({ - statusCode: 404, - statusMessage: `no config with key ${query} found`, - }); - } - } - - return settings; -}); diff --git a/server/api/settings/general.put.ts b/server/api/settings/general.put.ts deleted file mode 100644 index 3f47aa4..0000000 --- a/server/api/settings/general.put.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { eq } from 'drizzle-orm'; -import { generalSettingsSchema } from '~~/shared/schemas/setting'; -import { metaDataTable } from '~~/server/db/schema'; -import authenticateAdminRequest from '~~/server/utils/admin'; -import { settings_memoryStorage } from '~~/server/utils/storage'; - -export default defineEventHandler(async (event) => { - await authenticateAdminRequest(event); - - if (IS_DEV) { - console.log('updating settings'); - } - - const settingsUpdateRequest = await readValidatedBody( - event, - generalSettingsSchema.parse - ); - - const db = await useDatabase(); - - await db.transaction(async (tx) => { - if (settingsUpdateRequest.seo) { - const seoSettingsString = JSON.stringify(settingsUpdateRequest.seo); - await tx - .update(metaDataTable) - .set({ value: seoSettingsString, updatedAt: new Date() }) - .where(eq(metaDataTable.key, 'seoConfig')); - settings_memoryStorage.setItem('seoConfig', settingsUpdateRequest.seo); - } - if (settingsUpdateRequest.careerSite) { - const careerSiteString = JSON.stringify(settingsUpdateRequest.careerSite); - await tx - .update(metaDataTable) - .set({ value: careerSiteString, updatedAt: new Date() }) - .where(eq(metaDataTable.key, 'careerSiteConfig')); - settings_memoryStorage.setItem( - 'careerSiteConfig', - settingsUpdateRequest.careerSite - ); - } - }); -}); diff --git a/server/api/settings/seo.get.ts b/server/api/settings/seo.get.ts new file mode 100644 index 0000000..322607e --- /dev/null +++ b/server/api/settings/seo.get.ts @@ -0,0 +1,8 @@ +import { type SEOConfig } from '~~/shared/schemas/setting'; +import authenticateAdminRequest from '~~/server/utils/admin'; + +export default defineEventHandler(async (event) => { + await authenticateAdminRequest(event); + + return (await settings_memoryStorage.getItem('seoConfig')) as SEOConfig; +}); diff --git a/server/api/settings/seo.put.ts b/server/api/settings/seo.put.ts new file mode 100644 index 0000000..46c36d7 --- /dev/null +++ b/server/api/settings/seo.put.ts @@ -0,0 +1,27 @@ +import { eq } from 'drizzle-orm'; +import { careerSiteConfigSchema } from '~~/shared/schemas/setting'; +import { metaDataTable } from '~~/server/db/schema'; +import authenticateAdminRequest from '~~/server/utils/admin'; +import { settings_memoryStorage } from '~~/server/utils/storage'; + +export default defineEventHandler(async (event) => { + await authenticateAdminRequest(event); + + if (IS_DEV) { + console.log('updating seoConfig'); + } + + const settingsUpdateRequest = await readValidatedBody( + event, + careerSiteConfigSchema.parse + ); + + const db = await useDatabase(); + + const careerSiteString = JSON.stringify(settingsUpdateRequest); + await db + .update(metaDataTable) + .set({ value: careerSiteString, updatedAt: new Date() }) + .where(eq(metaDataTable.key, 'seoConfig')); + settings_memoryStorage.setItem('seoConfig', settingsUpdateRequest); +}); diff --git a/shared/schemas/setting.ts b/shared/schemas/setting.ts index 636776e..6ebbcb8 100644 --- a/shared/schemas/setting.ts +++ b/shared/schemas/setting.ts @@ -34,14 +34,7 @@ export const careerSiteConfigSchema = z.object({ ), }); -export type careerSiteConfig = z.infer; - -export const generalSettingsSchema = z.object({ - careerSite: careerSiteConfigSchema, - seo: seoConfigSchema, -}); - -export type GeneralSettings = z.infer; +export type CareerSiteConfig = z.infer; export const addMemberSchema = z.object({ id: z.string().uuid(),