40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import { collections } from "$lib/server/database";
|
|
import { z } from "zod";
|
|
import { authCondition } from "$lib/server/auth";
|
|
import { DEFAULT_SETTINGS } from "$lib/types/Settings";
|
|
|
|
export async function POST({ request, locals }) {
|
|
const body = await request.json();
|
|
|
|
const { ethicsModalAccepted, ...settings } = z
|
|
.object({
|
|
shareConversationsWithModelAuthors: z
|
|
.boolean()
|
|
.default(DEFAULT_SETTINGS.shareConversationsWithModelAuthors),
|
|
hideEmojiOnSidebar: z.boolean().default(DEFAULT_SETTINGS.hideEmojiOnSidebar),
|
|
ethicsModalAccepted: z.boolean().optional(),
|
|
activeModel: z.string().default(DEFAULT_SETTINGS.activeModel),
|
|
customPrompts: z.record(z.string()).default({}),
|
|
})
|
|
.parse(body);
|
|
|
|
await collections.settings.updateOne(
|
|
authCondition(locals),
|
|
{
|
|
$set: {
|
|
...settings,
|
|
...(ethicsModalAccepted && { ethicsModalAcceptedAt: new Date() }),
|
|
updatedAt: new Date(),
|
|
},
|
|
$setOnInsert: {
|
|
createdAt: new Date(),
|
|
},
|
|
},
|
|
{
|
|
upsert: true,
|
|
}
|
|
);
|
|
// return ok response
|
|
return new Response();
|
|
}
|