58
apps/web/src/app/api/settings/route.ts
Executable file
58
apps/web/src/app/api/settings/route.ts
Executable file
@@ -0,0 +1,58 @@
|
||||
import { handleApi } from "@/lib/api";
|
||||
import { requireUser, updateUserProfile } from "@/lib/services/user";
|
||||
import { db, spiritualConfig } from "@/lib/db";
|
||||
import { eq } from "drizzle-orm";
|
||||
import { normalizeSettingsTheme } from "@/lib/services/theme-migration";
|
||||
import { migrateUserThemeInDb } from "@/lib/services/theme-migration";
|
||||
import { seedPromptTemplatesForUser } from "@/lib/services/ai-templates";
|
||||
import { getSettingsForUser, upsertSetting } from "@/lib/repositories/settings.repository";
|
||||
import { parseJsonBody, settingsPatchSchema } from "@/lib/validation";
|
||||
|
||||
export async function GET() {
|
||||
return handleApi(async () => {
|
||||
const { user } = await requireUser();
|
||||
const allSettings = await getSettingsForUser(user.id);
|
||||
const settingsMap = Object.fromEntries(allSettings.map((s) => [s.key, s.value]));
|
||||
const migratedTheme = await migrateUserThemeInDb(
|
||||
user.id,
|
||||
settingsMap.theme as string | undefined
|
||||
);
|
||||
settingsMap.theme = migratedTheme;
|
||||
const [spiritual] = await db
|
||||
.select()
|
||||
.from(spiritualConfig)
|
||||
.where(eq(spiritualConfig.userId, user.id));
|
||||
await seedPromptTemplatesForUser(user.id);
|
||||
return {
|
||||
user,
|
||||
settings: normalizeSettingsTheme(settingsMap),
|
||||
spiritual,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
export async function PATCH(request: Request) {
|
||||
return handleApi(async () => {
|
||||
const body = await parseJsonBody(request, settingsPatchSchema);
|
||||
const { user } = await requireUser();
|
||||
|
||||
if (body.profile) {
|
||||
await updateUserProfile(user.id, body.profile);
|
||||
}
|
||||
if (body.settings) {
|
||||
for (const [key, value] of Object.entries(body.settings)) {
|
||||
await upsertSetting(user.id, key, value);
|
||||
}
|
||||
}
|
||||
if (body.spiritual) {
|
||||
await db
|
||||
.update(spiritualConfig)
|
||||
.set({
|
||||
prayerLabels: body.spiritual.prayerLabels,
|
||||
litanyLabels: body.spiritual.litanyLabels,
|
||||
})
|
||||
.where(eq(spiritualConfig.userId, user.id));
|
||||
}
|
||||
return { ok: true };
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user