finish group creation
This commit is contained in:
parent
424fe4cf42
commit
d333cbff04
1 changed files with 52 additions and 3 deletions
|
|
@ -3,7 +3,7 @@ import { getRequestEvent } from '$app/server';
|
|||
import type { Actions, PageServerLoad } from './$types';
|
||||
import { db } from '$lib/server/db';
|
||||
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 { and } from 'drizzle-orm';
|
||||
import { type User } from '$lib/server/db/schema';
|
||||
|
|
@ -146,13 +146,62 @@ export const actions = {
|
|||
},
|
||||
createGroup: async ({ request, locals }) => {
|
||||
const data = await request.formData();
|
||||
const members = data.getAll('member');
|
||||
const members = data.getAll('member').map((z) => z.toString());
|
||||
|
||||
if (!members.length) {
|
||||
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 }) => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue