Files
website/src/actions/admin.ts
bytedream 55c0852b7e
All checks were successful
deploy / build-and-deploy (push) Successful in 16s
rewrite website
2025-10-13 18:09:48 +02:00

56 lines
1.4 KiB
TypeScript

import { defineAction } from 'astro:actions';
import { db } from '@db/database.ts';
import { z } from 'astro:schema';
import { Session } from '@util/session.ts';
import { Permissions } from '@util/permissions.ts';
export const admin = {
addAdmin: defineAction({
input: z.object({
username: z.string(),
password: z.string(),
permissions: z.number()
}),
handler: async (input, context) => {
Session.actionSessionFromCookies(context.cookies, Permissions.Admin);
const { id } = await db.addAdmin(input);
return {
id: id
};
}
}),
editAdmin: defineAction({
input: z.object({
id: z.number(),
username: z.string(),
password: z.string().nullable(),
permissions: z.number()
}),
handler: async (input, context) => {
Session.actionSessionFromCookies(context.cookies, Permissions.Admin);
await db.editAdmin(input);
}
}),
deleteAdmin: defineAction({
input: z.object({
id: z.number()
}),
handler: async (input, context) => {
Session.actionSessionFromCookies(context.cookies, Permissions.Admin);
await db.deleteAdmin(input);
}
}),
admins: defineAction({
handler: async (_, context) => {
Session.actionSessionFromCookies(context.cookies, Permissions.Admin);
return {
admins: await db.getAdmins({})
};
}
})
};