diff --git a/src/lib/components/member-sidebar.svelte b/src/lib/components/member-sidebar.svelte
index 366055a..e3a371d 100644
--- a/src/lib/components/member-sidebar.svelte
+++ b/src/lib/components/member-sidebar.svelte
@@ -105,6 +105,20 @@
+
+ {#if (currentEntity as OverviewGroup).members === 1}
+
+ {/if}
{/if}
diff --git a/src/routes/app/+page.server.ts b/src/routes/app/+page.server.ts
index ed2af2d..496f589 100644
--- a/src/routes/app/+page.server.ts
+++ b/src/routes/app/+page.server.ts
@@ -452,6 +452,42 @@ export const actions = {
return { success: true };
},
+ deleteGroup: async ({ request, locals }) => {
+ const data = await request.formData();
+ const groupId = data.get('groupId');
+
+ if (typeof groupId !== 'string') {
+ return fail(400, { error: 'Invalid group ID' });
+ }
+
+ const group = await db.select().from(table.group).where(eq(table.group.id, groupId)).limit(1);
+
+ if (!group.length) {
+ return fail(404, { error: 'Group not found' });
+ }
+
+ const g = group[0];
+
+ if (g.owner !== locals.user!.id) {
+ return fail(403, { error: 'Not allowed' });
+ }
+
+ if ((g.members as string[]).length !== 1 || (g.members as string[])[0] !== locals.user!.id) {
+ return fail(400, { error: 'Group still has members' });
+ }
+
+ await db.transaction(async (tx) => {
+ await tx
+ .update(table.user)
+ .set({
+ groups: locals.user!.groups.map((z) => z.id).filter((id) => id !== groupId)
+ })
+ .where(eq(table.user.id, locals.user!.id));
+
+ await tx.delete(table.group).where(eq(table.group.id, groupId));
+ });
+ _sendToUser(locals.user!.id, { type: 'group', status: 'removed-from-group' });
+ },
createServer: async ({ request, locals }) => {
const data = await request.formData();