+
@@ -22,20 +22,6 @@
d="M5 9h14M5 15h14M11 4L7 20M17 4l-4 16" />
{{ channel.name }}
-
-
{{ channel.name }}
-
@@ -43,22 +29,12 @@
\ No newline at end of file
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 33f7159..47d0601 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -28,6 +28,7 @@ export default {
autoImports: [
// automatically imports `defineStore`
'defineStore', // import { defineStore } from 'pinia'
+ 'storeToRefs',
// automatically imports `defineStore` as `definePiniaStore`
['defineStore', 'definePiniaStore'], // import { defineStore as definePiniaStore } from 'pinia'
],
diff --git a/pages/channel/@me/[dmId].vue b/pages/channel/@me/[dmId].vue
index b801255..aa692f3 100644
--- a/pages/channel/@me/[dmId].vue
+++ b/pages/channel/@me/[dmId].vue
@@ -1,16 +1,105 @@
- hello world
+
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/pages/channel/[id].vue b/pages/channel/[id].vue
index f1ba158..201a7bf 100644
--- a/pages/channel/[id].vue
+++ b/pages/channel/[id].vue
@@ -1,12 +1,25 @@
- hello world
+ {{ $route.params.id }}
-
\ No newline at end of file
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index c7a40d2..5f6b72b 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -12,10 +12,10 @@ model User {
email String @unique
username String @unique
passwordhash String
- Server Server[]
+ server Server[]
serverId String?
- Messages Message[]
- Session Session[]
+ messages Message[]
+ session Session[]
}
model Server {
@@ -28,9 +28,9 @@ model Server {
model Channel {
id String @id @default(cuid())
name String
- Server Server? @relation(fields: [serverId], references: [id])
+ server Server? @relation(fields: [serverId], references: [id])
serverId String?
- Message Message[]
+ messages Message[]
}
model Message {
diff --git a/server/api/channel/messages/[id].get.ts b/server/api/channel/messages/[id].get.ts
new file mode 100644
index 0000000..d002bf4
--- /dev/null
+++ b/server/api/channel/messages/[id].get.ts
@@ -0,0 +1,35 @@
+import { PrismaClient } from '@prisma/client'
+const prisma = new PrismaClient()
+
+export default defineEventHandler(async (event) => {
+ if (!event.context.user.authenticated) return {
+ message: 'You must be logged in to view a channel.'
+ }
+
+ if (!event.context.params.id) {
+ event.node.res.statusCode = 400;
+ return {
+ message: 'A channelId is required'
+ }
+ }
+
+ const channel = await prisma.channel.findFirst({
+ where: {
+ id: event.context.params.id
+ },
+ include: {
+ messages: true,
+ }
+ })
+
+ if (!channel) {
+ event.node.res.statusCode = 404;
+ return {
+ message: `Channel with id "${event.context.params.id}" not found`
+ }
+ }
+
+ return {
+ channel
+ }
+})
\ No newline at end of file
diff --git a/server/api/channel/sendMessage.post.ts b/server/api/channel/sendMessage.post.ts
new file mode 100644
index 0000000..d964f37
--- /dev/null
+++ b/server/api/channel/sendMessage.post.ts
@@ -0,0 +1,71 @@
+import { PrismaClient } from '@prisma/client'
+const prisma = new PrismaClient()
+
+export default defineEventHandler(async (event) => {
+ if (!event.context.user.authenticated) {
+ event.node.res.statusCode = 401;
+ return {
+ message: 'You must be logged in to send a message.'
+ }
+ }
+
+ const { body, channelId } = await readBody(event)
+
+ if (!body || !channelId) {
+ event.node.res.statusCode = 400;
+ return {
+ message: 'A body or channelId is required to send a message.'
+ }
+ }
+
+ const channel = await prisma.channel.findFirst({
+ where: {
+ id: channelId
+ }
+ })
+
+ const server = await prisma.server.findFirst({
+ where: {
+ id: channel.serverId
+ },
+ include: {
+ participants: true
+ }
+ })
+
+ const userInServer = server.participants.filter((e) => e.id === event.context.user.id)
+
+ if (!userInServer.length > 0) {
+ event.node.res.statusCode = 401;
+ return {
+ message: 'You must be in the server to send a message.'
+ }
+ }
+
+ if (!server) {
+ event.node.res.statusCode = 404;
+ return {
+ message: 'Server not found'
+ }
+ }
+
+ const message = await prisma.message.create({
+ data: {
+ body,
+ creator: {
+ connect: {
+ id: event.context.user.id
+ }
+ },
+ channel: {
+ connect: {
+ id: channelId
+ }
+ }
+ }
+ })
+
+ return {
+ message
+ }
+})
\ No newline at end of file
diff --git a/server/middleware/auth.ts b/server/middleware/auth.ts
index 3e4ea44..2426669 100644
--- a/server/middleware/auth.ts
+++ b/server/middleware/auth.ts
@@ -4,8 +4,6 @@ const prisma = new PrismaClient()
export default defineEventHandler(async (event) => {
const cookies = parseCookies(event)
- console.log(cookies.sessionToken)
-
if (!cookies.sessionToken) {
event.context.user = { authenticated: false }
return;
diff --git a/stores/servers.ts b/stores/servers.ts
index 58f36d6..49f1713 100644
--- a/stores/servers.ts
+++ b/stores/servers.ts
@@ -2,14 +2,19 @@ export const useServerStore = defineStore('server', {
state: () => ({
servers: [],
dms: [],
- activeServer: undefined
+ activeServer: {}
}),
actions: {
addServer(server) {
+ if (this.servers.includes(server)) return;
this.servers.push(server)
},
addDM(server) {
+ if (this.dms.includes(server)) return;
this.dms.push(server)
- }
+ },
+ setActive(type, serverId) {
+ this.activeServer = this[type].find((e) => e.id === serverId)
+ },
},
})