Skip to content

Commit

Permalink
chore(api)!: dedupe career site and seo settings
Browse files Browse the repository at this point in the history
  • Loading branch information
amandesai01 committed Sep 7, 2024
1 parent e7d9924 commit 6009934
Showing 8 changed files with 87 additions and 128 deletions.
48 changes: 14 additions & 34 deletions server/api/public/settings.get.ts
Original file line number Diff line number Diff line change
@@ -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;
});
10 changes: 10 additions & 0 deletions server/api/settings/career-site.get.ts
Original file line number Diff line number Diff line change
@@ -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;
});
27 changes: 27 additions & 0 deletions server/api/settings/career-site.put.ts
Original file line number Diff line number Diff line change
@@ -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);
});
44 changes: 0 additions & 44 deletions server/api/settings/general.get.ts

This file was deleted.

42 changes: 0 additions & 42 deletions server/api/settings/general.put.ts

This file was deleted.

8 changes: 8 additions & 0 deletions server/api/settings/seo.get.ts
Original file line number Diff line number Diff line change
@@ -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;
});
27 changes: 27 additions & 0 deletions server/api/settings/seo.put.ts
Original file line number Diff line number Diff line change
@@ -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);
});
9 changes: 1 addition & 8 deletions shared/schemas/setting.ts
Original file line number Diff line number Diff line change
@@ -34,14 +34,7 @@ export const careerSiteConfigSchema = z.object({
),
});

export type careerSiteConfig = z.infer<typeof careerSiteConfigSchema>;

export const generalSettingsSchema = z.object({
careerSite: careerSiteConfigSchema,
seo: seoConfigSchema,
});

export type GeneralSettings = z.infer<typeof generalSettingsSchema>;
export type CareerSiteConfig = z.infer<typeof careerSiteConfigSchema>;

export const addMemberSchema = z.object({
id: z.string().uuid(),

0 comments on commit 6009934

Please sign in to comment.