small frontend rewrite
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -88,6 +88,7 @@ export default defineEventHandler(async (event) => {
|
||||
select: {
|
||||
id: true,
|
||||
body: true,
|
||||
createdAt: true,
|
||||
creator: {
|
||||
select: {
|
||||
id: true,
|
||||
|
||||
@@ -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
|
||||
};
|
||||
});
|
||||
@@ -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
|
||||
};
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user