38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import type { APIRoute } from 'astro';
|
|
import { db } from '../../../db';
|
|
import { siteSettings } from '../../../db/schema';
|
|
import { eq } from 'drizzle-orm';
|
|
import { nanoid } from 'nanoid';
|
|
|
|
export const POST: APIRoute = async ({ request, locals, redirect }) => {
|
|
const user = locals.user;
|
|
if (!user || !user.isSiteAdmin) {
|
|
return new Response('Unauthorized', { status: 403 });
|
|
}
|
|
|
|
const formData = await request.formData();
|
|
const registrationEnabled = formData.get('registration_enabled') === 'on';
|
|
|
|
const existingSetting = await db.select()
|
|
.from(siteSettings)
|
|
.where(eq(siteSettings.key, 'registration_enabled'))
|
|
.get();
|
|
|
|
if (existingSetting) {
|
|
await db.update(siteSettings)
|
|
.set({
|
|
value: registrationEnabled ? 'true' : 'false',
|
|
updatedAt: new Date()
|
|
})
|
|
.where(eq(siteSettings.key, 'registration_enabled'));
|
|
} else {
|
|
await db.insert(siteSettings).values({
|
|
id: nanoid(),
|
|
key: 'registration_enabled',
|
|
value: registrationEnabled ? 'true' : 'false',
|
|
});
|
|
}
|
|
|
|
return redirect('/admin');
|
|
};
|