This commit is contained in:
parent
078ae89708
commit
7ac248baf5
@ -24,7 +24,7 @@ export const admin = {
|
|||||||
input: z.object({
|
input: z.object({
|
||||||
id: z.number(),
|
id: z.number(),
|
||||||
username: z.string(),
|
username: z.string(),
|
||||||
password: z.string(),
|
password: z.string().nullable(),
|
||||||
permissions: z.number()
|
permissions: z.number()
|
||||||
}),
|
}),
|
||||||
handler: async (input, context) => {
|
handler: async (input, context) => {
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{#each $admins as admin, i (admin.id)}
|
{#each $admins as admin, i (admin)}
|
||||||
<tr class="hover:bg-base-200">
|
<tr class="hover:bg-base-200">
|
||||||
<td>{i + 1}</td>
|
<td>{i + 1}</td>
|
||||||
<td>{admin.username}</td>
|
<td>{admin.username}</td>
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
const index = reactiveSet.indexOf(badge);
|
const index = reactiveSet.indexOf(badge);
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
reactiveSet.splice(index, 1);
|
reactiveSet.splice(index, 1);
|
||||||
|
onUpdate?.(reactiveSet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
let password = $state<string | null>(null);
|
let password = $state<string | null>(null);
|
||||||
let permissions = $state<number | null>(admin?.permissions ?? 0);
|
let permissions = $state<number | null>(admin?.permissions ?? 0);
|
||||||
|
|
||||||
let submitEnabled = $derived(!!(username && password));
|
let submitEnabled = $derived(!!username && (admin || password));
|
||||||
|
|
||||||
// lifecycle
|
// lifecycle
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
@ -85,7 +85,7 @@
|
|||||||
<div class="w-full gap-x-4 gap-y-2">
|
<div class="w-full gap-x-4 gap-y-2">
|
||||||
<div class="w-[20rem]">
|
<div class="w-[20rem]">
|
||||||
<Input type="text" bind:value={username} label="Username" required />
|
<Input type="text" bind:value={username} label="Username" required />
|
||||||
<Password bind:value={password} label="Password" required />
|
<Password bind:value={password} label="Password" required={!admin} />
|
||||||
</div>
|
</div>
|
||||||
<fieldset class="fieldset">
|
<fieldset class="fieldset">
|
||||||
<legend class="fieldset-legend">Berechtigungen</legend>
|
<legend class="fieldset-legend">Berechtigungen</legend>
|
||||||
|
@ -15,7 +15,12 @@ export const admin = mysqlTable('admin', {
|
|||||||
|
|
||||||
export type AddAdminReq = Omit<typeof admin.$inferInsert, 'id'>;
|
export type AddAdminReq = Omit<typeof admin.$inferInsert, 'id'>;
|
||||||
|
|
||||||
export type EditAdminReq = Omit<typeof admin.$inferInsert, 'id'> & { id: number };
|
export type EditAdminReq = {
|
||||||
|
id: number;
|
||||||
|
username: string;
|
||||||
|
password: string | null;
|
||||||
|
permissions: number;
|
||||||
|
};
|
||||||
|
|
||||||
export type GetAdminReq = {};
|
export type GetAdminReq = {};
|
||||||
export type GetAdminRes = Omit<typeof admin.$inferSelect, 'password'>[];
|
export type GetAdminRes = Omit<typeof admin.$inferSelect, 'password'>[];
|
||||||
@ -39,9 +44,15 @@ export async function addAdmin(db: Database, values: AddAdminReq) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function editAdmin(db: Database, values: EditAdminReq) {
|
export async function editAdmin(db: Database, values: EditAdminReq) {
|
||||||
values.password = bcrypt.hashSync(values.password, 10);
|
return db
|
||||||
|
.update(admin)
|
||||||
await db.update(admin).set(values).where(eq(admin.id, values.id));
|
.set({
|
||||||
|
id: values.id,
|
||||||
|
username: values.username,
|
||||||
|
password: values.password != null ? bcrypt.hashSync(values.password, 10) : undefined,
|
||||||
|
permissions: values.permissions
|
||||||
|
})
|
||||||
|
.where(eq(admin.id, values.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getAdmins(db: Database, _values: GetAdminReq): Promise<GetAdminRes> {
|
export async function getAdmins(db: Database, _values: GetAdminReq): Promise<GetAdminRes> {
|
||||||
|
@ -17,7 +17,7 @@ const session = Session.sessionFromCookies(Astro.cookies);
|
|||||||
|
|
||||||
const preTabs = [
|
const preTabs = [
|
||||||
{
|
{
|
||||||
href: ``,
|
href: '',
|
||||||
name: 'Varo Startseite',
|
name: 'Varo Startseite',
|
||||||
icon: 'heroicons:computer-desktop-20-solid'
|
icon: 'heroicons:computer-desktop-20-solid'
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user