finish group creation

This commit is contained in:
Soph :3 2026-01-05 21:28:30 +02:00
parent 424fe4cf42
commit d333cbff04

View file

@ -3,7 +3,7 @@ import { getRequestEvent } from '$app/server';
import type { Actions, PageServerLoad } from './$types'; import type { Actions, PageServerLoad } from './$types';
import { db } from '$lib/server/db'; import { db } from '$lib/server/db';
import * as table from '$lib/server/db/schema'; import * as table from '$lib/server/db/schema';
import { DirectMessageID, FriendRequestID, ServerID } from '$lib'; import { DirectMessageID, FriendRequestID, GroupID, ServerID } from '$lib';
import { eq } from 'drizzle-orm'; import { eq } from 'drizzle-orm';
import { and } from 'drizzle-orm'; import { and } from 'drizzle-orm';
import { type User } from '$lib/server/db/schema'; import { type User } from '$lib/server/db/schema';
@ -146,13 +146,62 @@ export const actions = {
}, },
createGroup: async ({ request, locals }) => { createGroup: async ({ request, locals }) => {
const data = await request.formData(); const data = await request.formData();
const members = data.getAll('member'); const members = data.getAll('member').map((z) => z.toString());
if (!members.length) { if (!members.length) {
return fail(400, { error: 'No members selected' }); return fail(400, { error: 'No members selected' });
} }
if (members.includes(locals.user!.id)) {
return fail(403, { error: 'You cannot add yourself to a group.' });
}
return { success: true }; if (members.length > 9) {
return fail(400, { error: 'Too many members' });
}
if (members.length < 2) {
return fail(400, { error: 'Not enough members' });
}
for (const member of members) {
if (!locals.user!.friends.find((z) => z.id == member)) {
return fail(403, { error: 'A member is not your friend.' });
}
}
const nameArray = [];
for await (const member of members) {
const dbUser = await db.select().from(table.user).where(eq(table.user.id, member)).limit(1);
nameArray.push(dbUser[0].username);
if (!dbUser.length) {
return fail(400, { error: 'Invalid member' });
}
}
members.push(locals.user!.id);
nameArray.push(locals.user!.username);
const group = await db
.insert(table.group)
.values({
id: GroupID.newV4(),
name: nameArray.join(', '),
owner: locals.user!.id,
members: members,
messages: []
})
.returning();
await db.transaction(async (tx) => {
for await (const member of members) {
const user = await tx.select().from(table.user).where(eq(table.user.id, member)).limit(1);
await tx
.update(table.user)
.set({ groups: (user[0].groups as string[]).concat(group[0].id) })
.where(eq(table.user.id, member));
}
});
return { success: true, group };
}, },
joinServer: async ({ request, locals }) => { joinServer: async ({ request, locals }) => {