small frontend rewrite

This commit is contained in:
Zoe
2023-04-24 20:12:36 -05:00
parent 4890d657b5
commit 5743ae664e
40 changed files with 2630 additions and 2569 deletions

View File

@@ -39,46 +39,6 @@ export default defineEventHandler(async (event) => {
id: true,
DM: true,
name: true,
messages: {
select: {
id: true,
body: true,
creator: {
select: {
id: true,
username: true
}
},
invites: {
select: {
id: true,
server: {
select: {
id: true,
name: true,
participants: {
select: {
id: true,
}
}
}
}
}
},
reactions: {
select: {
id: true,
emoji: true,
users: {
select: {
id: true,
username: true
}
}
}
}
}
}
}
},
}
@@ -87,6 +47,7 @@ export default defineEventHandler(async (event) => {
select: {
id: true,
body: true,
createdAt: true,
creator: {
select: {
id: true,

View File

@@ -47,7 +47,23 @@ export default defineEventHandler(async (event) => {
}
}
}
}
},
invites: {
select: {
id: true,
server: {
select: {
id: true,
name: true,
participants: {
select: {
id: true
}
}
}
}
}
},
};
const message = await prisma.message.findFirst({

View File

@@ -88,6 +88,7 @@ export default defineEventHandler(async (event) => {
select: {
id: true,
body: true,
createdAt: true,
creator: {
select: {
id: true,

View File

@@ -3,7 +3,7 @@ import { v4 as uuidv4 } from 'uuid';
import * as dotenv from 'dotenv';
import crypto from 'node:crypto';
import { PrismaClient } from '@prisma/client';
import { IUser, SafeUser } from '~/types';
import { IUser } from '~/types';
const prisma = new PrismaClient();
dotenv.config();
@@ -27,7 +27,25 @@ export default defineEventHandler(async (event) => {
id: true,
username: true,
passwordhash: true,
email: true,
servers: {
select: {
id: true,
name: true,
channels: true,
}
},
channels: {
select: {
id: true,
DM: true,
dmParticipants: {
select: {
id: true,
username: true,
}
}
}
}
},
}) as unknown as IUser;
@@ -51,11 +69,10 @@ export default defineEventHandler(async (event) => {
}
});
user = user as SafeUser;
user.passwordhash = undefined;
return {
token,
userId: user.id,
user
};
});

View File

@@ -52,19 +52,21 @@ export default defineEventHandler(async (event) => {
username: true,
servers: {
select: {
participants: {
id: true,
name: true,
channels: true,
}
},
channels: {
select: {
id: true,
DM: true,
dmParticipants: {
select: {
id: true,
username: true
username: true,
}
},
channels: {
select: {
id: true,
DM: true,
name: true,
}
},
}
}
}
},
@@ -83,7 +85,6 @@ export default defineEventHandler(async (event) => {
return {
token,
userId: user.id,
user
};
});

View File

@@ -1,113 +1,117 @@
import { Server } from 'socket.io';
import { PrismaClient } from '@prisma/client';
import { IChannel, IServer, IUser, SafeUser } from '~~/types';
import { Socket } from 'socket.io';
const prisma = new PrismaClient();
export default defineEventHandler(({ node }) => {
if (!global.io) {
global.io = new Server(node.res.socket?.server);
if (global.io) return;
global.io = new Server(node.res.socket?.server);
global.io.on('connection', async (socket) => {
const token = socket.handshake.auth.token;
if (!token) {
return;
}
global.io.on('connection', async (socket: Socket) => {
const token = socket.handshake.auth.token;
const { user } = await prisma.session.findFirst({
where: {
token
},
select: {
user: {
select: {
id: true,
username: true,
servers: {
select: {
id: true,
name: true,
participants: {
select: {
id: true,
username: true,
roles: {
select: {
id: true,
administrator: true,
owner: true
}
if (!token) {
socket.disconnect();
return;
}
const { user } = await prisma.session.findFirst({
where: {
token
},
select: {
user: {
select: {
id: true,
username: true,
servers: {
select: {
id: true,
name: true,
participants: {
select: {
id: true,
username: true,
roles: {
select: {
id: true,
administrator: true,
owner: true
}
}
},
channels: {
select: {
id: true,
DM: true,
server: {
select: {
id: true,
name: true,
participants: {
select: {
id: true,
username: true,
roles: {
select: {
id: true,
administrator: true,
owner: true
}
}
},
channels: {
select: {
id: true,
DM: true,
server: {
select: {
id: true,
name: true,
participants: {
select: {
id: true,
username: true,
roles: {
select: {
id: true,
administrator: true,
owner: true
}
}
},
}
}
},
}
}
}
}
},
channels: {
select: {
id: true,
DM: true,
dmParticipants: {
select: {
id: true,
username: true
}
},
}
}
},
channels: {
select: {
id: true,
DM: true,
dmParticipants: {
select: {
id: true,
username: true
}
},
}
}
}
}
}) as unknown as { user: IUser };
}
}) as unknown as { user: IUser };
if (!user) {
if (!user) {
socket.disconnect();
return;
}
socket.on('typing', async (ev) => {
if (!ev) {
return;
}
socket.on('typing', async (ev) => {
if (!ev) {
let channel = user.channels?.find((c: IChannel) => c.id === ev) || user.servers?.find((s: IServer) => s.channels.some((c: IChannel) => c.id === ev));
if (channel?.DM === undefined) {
// assume its a server
channel = channel?.channels.find((c: IChannel) => c.id === ev);
}
if (!channel) return;
if (!channel.dmParticipants?.find((e: SafeUser) => e.id === user.id)) {
if (!channel.server || !channel.server.participants.find((e: SafeUser) => e.id === user.id)) {
return;
}
}
let channel = user.channels?.find((c: IChannel) => c.id === ev) || user.servers?.find((s: IServer) => s.channels.some((c: IChannel) => c.id === ev));
if (channel?.DM === undefined) {
// assume its a server
channel = channel?.channels.find((c: IChannel) => c.id === ev);
}
if (!channel) return;
if (!channel.dmParticipants?.find((e: SafeUser) => e.id === user.id)) {
if (!channel.server || !channel.server.participants.find((e: SafeUser) => e.id === user.id)) {
return;
}
}
global.io.emit(`typing-${channel.id}`, user.username);
});
global.io.emit(`typing-${channel.id}`, user.username);
});
}
});
});