myagent10101's picture
feat: Complete CodeSync collaborative coding platform
8f9c4ef verified
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(uuid())
email String @unique
name String
avatar String?
password String?
provider String @default("LOCAL")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
ownedRooms Room[] @relation("RoomOwner")
memberships RoomMembership[]
messages Message[]
executions Execution[]
snippets Snippet[]
activities Activity[]
@@map("users")
}
model Room {
id String @id @default(uuid())
name String
ownerId String
language String @default("javascript")
isPublic Boolean @default(false)
inviteCode String @unique
maxMembers Int @default(10)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
owner User @relation("RoomOwner", fields: [ownerId], references: [id], onDelete: Cascade)
members RoomMembership[]
files RoomFile[]
messages Message[]
executions Execution[]
@@index([ownerId])
@@map("rooms")
}
model RoomMembership {
id String @id @default(uuid())
userId String
roomId String
role String @default("EDITOR")
joinedAt DateTime @default(now())
lastActive DateTime @default(now())
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
room Room @relation(fields: [roomId], references: [id], onDelete: Cascade)
@@unique([userId, roomId])
@@map("room_memberships")
}
model RoomFile {
id String @id @default(uuid())
roomId String
name String
path String
content String @default("")
language String @default("javascript")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
room Room @relation(fields: [roomId], references: [id], onDelete: Cascade)
@@unique([roomId, path])
@@map("room_files")
}
model Message {
id String @id @default(uuid())
content String
type String @default("TEXT")
metadata Json?
userId String
roomId String
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
room Room @relation(fields: [roomId], references: [id], onDelete: Cascade)
@@index([roomId, createdAt])
@@map("messages")
}
model Execution {
id String @id @default(uuid())
userId String
roomId String
language String
code String
stdout String @default("")
stderr String @default("")
exitCode Int @default(0)
duration Int @default(0)
memoryUsed Int @default(0)
timedOut Boolean @default(false)
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
room Room @relation(fields: [roomId], references: [id], onDelete: Cascade)
@@index([userId, createdAt])
@@map("executions")
}
model Snippet {
id String @id @default(uuid())
userId String
title String
description String?
code String
language String
isPublic Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId])
@@map("snippets")
}
model Activity {
id String @id @default(uuid())
userId String
type String
description String
roomId String?
roomName String?
metadata Json?
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId, createdAt])
@@map("activities")
}