Skip to content

Commit 6009934

Browse files
committed
chore(api)!: dedupe career site and seo settings
1 parent e7d9924 commit 6009934

File tree

8 files changed

+87
-128
lines changed

8 files changed

+87
-128
lines changed

server/api/public/settings.get.ts

+14-34
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,25 @@
1-
import { z } from 'zod';
2-
import { type GeneralSettings } from '~~/shared/schemas/setting';
1+
import {
2+
type SEOConfig,
3+
type CareerSiteConfig,
4+
} from '~~/shared/schemas/setting';
35
import { settings_memoryStorage } from '~~/server/utils/storage';
46

5-
const settingsLookupSchema = z.object({
6-
config: z.enum(['seoConfig', 'careerSiteConfig']).optional(),
7-
});
8-
9-
export default defineEventHandler(async (event) => {
10-
const query = await getValidatedQuery(event, settingsLookupSchema.parse);
11-
const queries = query.config
12-
? [query.config]
13-
: ['seoConfig', 'careerSiteConfig'];
14-
7+
export default defineEventHandler(async () => {
158
if (IS_DEV) {
16-
console.log('fetching public settings. queries:', queries);
9+
console.log('fetching public settings');
1710
}
1811

19-
const settings: GeneralSettings = {
12+
const settings = {
2013
careerSite: {},
2114
seo: {},
22-
} as GeneralSettings; // Ignore validation errors here.
15+
} as { careerSite: CareerSiteConfig; seo: SEOConfig };
2316

24-
for (let index = 0; index < queries.length; index++) {
25-
const query = queries[index];
26-
let value: any;
27-
switch (query) {
28-
case 'seoConfig':
29-
value = await settings_memoryStorage.getItem(query);
30-
settings.seo = value as GeneralSettings['seo'];
31-
break;
32-
case 'careerSiteConfig':
33-
value = await settings_memoryStorage.getItem(query);
34-
settings.careerSite = value as GeneralSettings['careerSite'];
35-
break;
36-
default:
37-
throw createError({
38-
statusCode: 404,
39-
statusMessage: `no config with key ${query} found`,
40-
});
41-
}
42-
}
17+
settings.seo = (await settings_memoryStorage.getItem(
18+
'seoConfig'
19+
)) as SEOConfig;
20+
settings.careerSite = (await settings_memoryStorage.getItem(
21+
'careerSiteConfig'
22+
)) as CareerSiteConfig;
4323

4424
return settings;
4525
});
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { type CareerSiteConfig } from '~~/shared/schemas/setting';
2+
import authenticateAdminRequest from '~~/server/utils/admin';
3+
4+
export default defineEventHandler(async (event) => {
5+
await authenticateAdminRequest(event);
6+
7+
return (await settings_memoryStorage.getItem(
8+
'careerSiteConfig'
9+
)) as CareerSiteConfig;
10+
});
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { eq } from 'drizzle-orm';
2+
import { careerSiteConfigSchema } from '~~/shared/schemas/setting';
3+
import { metaDataTable } from '~~/server/db/schema';
4+
import authenticateAdminRequest from '~~/server/utils/admin';
5+
import { settings_memoryStorage } from '~~/server/utils/storage';
6+
7+
export default defineEventHandler(async (event) => {
8+
await authenticateAdminRequest(event);
9+
10+
if (IS_DEV) {
11+
console.log('updating careerSiteConfig');
12+
}
13+
14+
const settingsUpdateRequest = await readValidatedBody(
15+
event,
16+
careerSiteConfigSchema.parse
17+
);
18+
19+
const db = await useDatabase();
20+
21+
const careerSiteString = JSON.stringify(settingsUpdateRequest);
22+
await db
23+
.update(metaDataTable)
24+
.set({ value: careerSiteString, updatedAt: new Date() })
25+
.where(eq(metaDataTable.key, 'careerSiteConfig'));
26+
settings_memoryStorage.setItem('careerSiteConfig', settingsUpdateRequest);
27+
});

server/api/settings/general.get.ts

-44
This file was deleted.

server/api/settings/general.put.ts

-42
This file was deleted.

server/api/settings/seo.get.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { type SEOConfig } from '~~/shared/schemas/setting';
2+
import authenticateAdminRequest from '~~/server/utils/admin';
3+
4+
export default defineEventHandler(async (event) => {
5+
await authenticateAdminRequest(event);
6+
7+
return (await settings_memoryStorage.getItem('seoConfig')) as SEOConfig;
8+
});

server/api/settings/seo.put.ts

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { eq } from 'drizzle-orm';
2+
import { careerSiteConfigSchema } from '~~/shared/schemas/setting';
3+
import { metaDataTable } from '~~/server/db/schema';
4+
import authenticateAdminRequest from '~~/server/utils/admin';
5+
import { settings_memoryStorage } from '~~/server/utils/storage';
6+
7+
export default defineEventHandler(async (event) => {
8+
await authenticateAdminRequest(event);
9+
10+
if (IS_DEV) {
11+
console.log('updating seoConfig');
12+
}
13+
14+
const settingsUpdateRequest = await readValidatedBody(
15+
event,
16+
careerSiteConfigSchema.parse
17+
);
18+
19+
const db = await useDatabase();
20+
21+
const careerSiteString = JSON.stringify(settingsUpdateRequest);
22+
await db
23+
.update(metaDataTable)
24+
.set({ value: careerSiteString, updatedAt: new Date() })
25+
.where(eq(metaDataTable.key, 'seoConfig'));
26+
settings_memoryStorage.setItem('seoConfig', settingsUpdateRequest);
27+
});

shared/schemas/setting.ts

+1-8
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,7 @@ export const careerSiteConfigSchema = z.object({
3434
),
3535
});
3636

37-
export type careerSiteConfig = z.infer<typeof careerSiteConfigSchema>;
38-
39-
export const generalSettingsSchema = z.object({
40-
careerSite: careerSiteConfigSchema,
41-
seo: seoConfigSchema,
42-
});
43-
44-
export type GeneralSettings = z.infer<typeof generalSettingsSchema>;
37+
export type CareerSiteConfig = z.infer<typeof careerSiteConfigSchema>;
4538

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

0 commit comments

Comments
 (0)