-
-
+
+
@@ -38,6 +37,10 @@ export default {
if (!user) return;
userStore.setUser(user)
+ const { channels: dms, servers } = await $fetch('/api/user/getServers')
+
+ useGlobalStore().servers = servers
+ useGlobalStore().dms = dms
}
}
}
diff --git a/pages/channel/[id].vue b/pages/channel/[id].vue
index ffa2d93..1f4fa3b 100644
--- a/pages/channel/[id].vue
+++ b/pages/channel/[id].vue
@@ -7,7 +7,7 @@ const route = useRoute()
const server: IChannel = await $fetch(`/api/channels/${route.params.id}`)
-const realServer = useGlobalStore().user.servers?.filter((e) => e.channels.some((el) => el.id == route.params.id))[0]
+const realServer = useGlobalStore().servers?.filter((e) => e.channels.some((el) => el.id == route.params.id))[0]
if (realServer) {
useGlobalStore().addServer(realServer);
diff --git a/server/api/channels/[id]/index.get.ts b/server/api/channels/[id]/index.get.ts
index be1d340..661bda6 100644
--- a/server/api/channels/[id]/index.get.ts
+++ b/server/api/channels/[id]/index.get.ts
@@ -44,7 +44,8 @@ export default defineEventHandler(async (event) => {
server: {
select: {
id: true,
- name: true
+ name: true,
+ participants: true
}
}
}
diff --git a/server/api/channels/sendMessage.post.ts b/server/api/channels/sendMessage.post.ts
index d09b5c0..5dc7d1a 100644
--- a/server/api/channels/sendMessage.post.ts
+++ b/server/api/channels/sendMessage.post.ts
@@ -113,14 +113,20 @@ export default defineEventHandler(async (event) => {
invites: {
select: {
id: true,
- server: true,
expires: true,
expiryDate: true,
- maxUses: true
+ maxUses: true,
+ server: {
+ select: {
+ id: true,
+ name: true,
+ participants: true
+ }
+ }
}
}
}
- }) as IMessage
+ }) as unknown as IMessage
global.io.emit(`message-${channel.id}`, { message });
diff --git a/server/api/getCurrentUser.get.ts b/server/api/getCurrentUser.get.ts
index b4b8b61..0b22683 100644
--- a/server/api/getCurrentUser.get.ts
+++ b/server/api/getCurrentUser.get.ts
@@ -17,47 +17,6 @@ export default defineEventHandler(async (event) => {
select: {
id: true,
username: true,
- channels: {
- select: {
- id: true,
- name: true,
- messages: false,
- DM: true,
- dmParticipants: true
- }
- },
- servers: {
- select: {
- id: true,
- name: true,
- channels: {
- select: {
- id: true,
- DM: true,
- name: true
- }
- },
- participants: {
- select: {
- id: true,
- username: true
- }
- },
- roles: {
- select: {
- id: true,
- name: true,
- administrator: true,
- owner: true,
- users: {
- select: {
- id: true
- }
- }
- }
- }
- },
- },
}
}) as SafeUser | null;
diff --git a/server/api/login.post.ts b/server/api/login.post.ts
index 774bd71..8699fce 100644
--- a/server/api/login.post.ts
+++ b/server/api/login.post.ts
@@ -1,7 +1,7 @@
import bcryptjs from "bcryptjs";
import { v4 as uuidv4 } from "uuid";
import { PrismaClient } from '@prisma/client'
-import { IUser } from "../../types";
+import { IUser, SafeUser } from "../../types";
const prisma = new PrismaClient()
export default defineEventHandler(async (event) => {
@@ -14,11 +14,62 @@ export default defineEventHandler(async (event) => {
}
}
- const user = await prisma.user.findFirst({
+
+
+ let user = await prisma.user.findFirst({
where: {
username: body.username
- }
- }) as IUser
+ },
+ select: {
+ id: true,
+ username: true,
+ passwordhash: true,
+ email: true,
+ channels: {
+ select: {
+ id: true,
+ name: true,
+ messages: false,
+ DM: true,
+ dmParticipants: true,
+ serverId: true
+ }
+ },
+ servers: {
+ select: {
+ id: true,
+ name: true,
+ channels: {
+ select: {
+ id: true,
+ DM: true,
+ name: true,
+ serverId: true
+ }
+ },
+ participants: {
+ select: {
+ id: true,
+ username: true
+ }
+ },
+ roles: {
+ select: {
+ id: true,
+ name: true,
+ administrator: true,
+ owner: true,
+ users: {
+ select: {
+ id: true
+ }
+ }
+ }
+ }
+ },
+ }
+ },
+ }) as unknown
const isCorrect = await bcryptjs.compare(body.password, user.passwordhash)
@@ -38,6 +89,8 @@ export default defineEventHandler(async (event) => {
}
})
+ user = user as SafeUser
+
return {
token,
userId: user.id,
diff --git a/server/api/signup.post.ts b/server/api/signup.post.ts
index 3d36c52..f4ac47c 100644
--- a/server/api/signup.post.ts
+++ b/server/api/signup.post.ts
@@ -41,8 +41,57 @@ export default defineEventHandler(async (event) => {
username: body.username,
passwordhash,
email: body.email
- }
- }) as SafeUser
+ },
+ select: {
+ id: true,
+ username: true,
+ passwordhash: true,
+ email: true,
+ channels: {
+ select: {
+ id: true,
+ name: true,
+ messages: false,
+ DM: true,
+ dmParticipants: true,
+ serverId: true
+ }
+ },
+ servers: {
+ select: {
+ id: true,
+ name: true,
+ channels: {
+ select: {
+ id: true,
+ DM: true,
+ name: true,
+ serverId: true
+ }
+ },
+ participants: {
+ select: {
+ id: true,
+ username: true
+ }
+ },
+ roles: {
+ select: {
+ id: true,
+ name: true,
+ administrator: true,
+ owner: true,
+ users: {
+ select: {
+ id: true
+ }
+ }
+ }
+ }
+ },
+ }
+ },
+ }) as unknown
const token = uuidv4()
diff --git a/server/api/user/getServers.get.ts b/server/api/user/getServers.get.ts
new file mode 100644
index 0000000..336b692
--- /dev/null
+++ b/server/api/user/getServers.get.ts
@@ -0,0 +1,65 @@
+import { PrismaClient } from '@prisma/client'
+import { IServer, IUser } from '~/types'
+const prisma = new PrismaClient()
+
+export default defineEventHandler(async (event) => {
+ if (!event.context.user.authenticated) {
+ // event.node.res.statusCode = 401;
+ return {
+ message: "Unauthenticated"
+ }
+ }
+
+ const { servers, channels } = await prisma.user.findFirst({
+ where: {
+ id: event.context.user.id
+ },
+ select: {
+ channels: {
+ select: {
+ id: true,
+ name: true,
+ messages: false,
+ DM: true,
+ dmParticipants: true
+ }
+ },
+ servers: {
+ select: {
+ id: true,
+ name: true,
+ channels: {
+ select: {
+ id: true,
+ DM: true,
+ name: true
+ }
+ },
+ participants: {
+ select: {
+ id: true,
+ username: true
+ }
+ },
+ roles: {
+ select: {
+ id: true,
+ name: true,
+ administrator: true,
+ owner: true,
+ users: {
+ select: {
+ id: true
+ }
+ }
+ }
+ }
+ },
+ },
+ }
+ }) as IUser | null;
+
+ return {
+ servers, channels
+ }
+})
\ No newline at end of file
diff --git a/stores/store.ts b/stores/store.ts
index 4e59e63..57ed781 100644
--- a/stores/store.ts
+++ b/stores/store.ts
@@ -4,19 +4,21 @@ import { SafeUser, IServer, IChannel } from "../types";
export const useGlobalStore = defineStore('global', {
state: () => ({
activeServer: {} as IServer,
- user: {} as SafeUser
+ user: {} as SafeUser,
+ dms: [] as IChannel[],
+ servers: [] as IServer[]
}),
actions: {
setUser(user: SafeUser) {
this.user = user;
},
addServer(server: IServer) {
- if (!this.user.servers || this.user.servers.find((e) => e.id === server.id)) return;
- this.user.servers.push(server)
+ if (!this.servers || this.servers.find((e) => e.id === server.id)) return;
+ this.servers.push(server)
},
addDM(dmChannel: IChannel) {
- if (!this.user.channels || this.user.channels.find((e) => e.id === dmChannel.id)) return;
- this.user.channels.push(dmChannel)
+ if (!this.channels || this.channels.find((e) => e.id === dmChannel.id)) return;
+ this.channels.push(dmChannel)
},
setActive(type: string, serverId: string) {
if (serverId === '@me') {
@@ -24,21 +26,11 @@ export const useGlobalStore = defineStore('global', {
return;
}
console.log(this.activeServer)
- if (!this.user.channels || !this.user.servers) return;
- type = (type === 'dm') ? 'channels' : 'servers'
-
- if (type !== 'channels' && type !== 'servers') return;
-
- const searchableArray: IChannel[] | IServer[] | undefined = this["user"][type]
+ const searchableArray: IChannel[] | IServer[] | undefined = this[type]
if (!searchableArray) return;
- const activeServer = searchableArray.find((e: IServer | IChannel) => e.id === serverId)
- console.log(searchableArray, this["user"], activeServer)
-
- if (!activeServer) return;
-
- this.activeServer = activeServer
- console.log(this.activeServer)
+ this.activeServer = searchableArray.find((e: IServer | IChannel) => e.id === serverId)
+ console.log(this.activeServer, searchableArray.find((e: IServer | IChannel) => e.id === serverId))
},
},
})
diff --git a/types/index.ts b/types/index.ts
index ae28728..7a57758 100644
--- a/types/index.ts
+++ b/types/index.ts
@@ -14,7 +14,7 @@ export interface IServer {
id: string;
name: string;
channels?: Array
;
- participants: Array;
+ participants: Array;
roles?: Array;
inviteCode?: Array;
}
@@ -25,7 +25,7 @@ export interface IChannel {
server?: IServer;
messages?: Array
DM: boolean;
- dmParticipants?: Array;
+ dmParticipants?: Array;
serverId: string;
}