chat-app/backend/prisma/schema.prisma
Gal Podlipnik 95757dd169 images
2025-06-12 15:54:34 +02:00

108 lines
2.6 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(cuid())
username String @unique
email String @unique
password String
avatar String?
isOnline Boolean @default(false)
lastSeen DateTime @default(now())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
messages Message[]
reactions MessageReaction[]
chatRooms ChatRoomMember[]
createdRooms ChatRoom[]
seenMessages MessageSeen[]
@@map("users")
}
model ChatRoom {
id String @id @default(cuid())
name String
description String?
isPrivate Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
createdBy String
creator User @relation(fields: [createdBy], references: [id])
messages Message[]
members ChatRoomMember[]
@@map("chat_rooms")
}
model ChatRoomMember {
id String @id @default(cuid())
userId String
roomId String
joinedAt DateTime @default(now())
role String @default("member") // member, admin
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
room ChatRoom @relation(fields: [roomId], references: [id], onDelete: Cascade)
@@unique([userId, roomId])
@@map("chat_room_members")
}
model Message {
id String @id @default(cuid())
content String
image String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
userId String
roomId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
room ChatRoom @relation(fields: [roomId], references: [id], onDelete: Cascade)
reactions MessageReaction[]
seenBy MessageSeen[]
@@map("messages")
}
model MessageSeen {
id String @id @default(cuid())
seenAt DateTime @default(now())
userId String
messageId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
message Message @relation(fields: [messageId], references: [id], onDelete: Cascade)
@@unique([userId, messageId])
@@map("message_seen")
}
model MessageReaction {
id String @id @default(cuid())
type String // like, love, laugh, etc.
createdAt DateTime @default(now())
userId String
messageId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
message Message @relation(fields: [messageId], references: [id], onDelete: Cascade)
@@unique([userId, messageId, type])
@@map("message_reactions")
}