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 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 }) => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue