148 lines
4.0 KiB
Plaintext
148 lines
4.0 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "mysql"
|
|
}
|
|
|
|
enum UserRole {
|
|
admin
|
|
user
|
|
}
|
|
|
|
enum MeetingType {
|
|
instant
|
|
scheduled
|
|
}
|
|
|
|
enum MeetingStatus {
|
|
scheduled
|
|
active
|
|
ended
|
|
}
|
|
|
|
enum ParticipantRole {
|
|
host
|
|
co_host
|
|
participant
|
|
}
|
|
|
|
enum ParticipantStatus {
|
|
pending
|
|
admitted
|
|
denied
|
|
left
|
|
}
|
|
|
|
enum RecordingStatus {
|
|
in_progress
|
|
processing
|
|
completed
|
|
failed
|
|
}
|
|
|
|
model User {
|
|
id Int @id @default(autoincrement())
|
|
email String @unique
|
|
password String
|
|
displayName String @map("display_name")
|
|
role UserRole @default(user)
|
|
emailVerifiedAt DateTime? @map("email_verified_at")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
hostedMeetings Meeting[] @relation("MeetingHost")
|
|
meetingParticipant MeetingParticipant[]
|
|
notes Note[]
|
|
startedRecordings Recording[] @relation("RecordingStartedBy")
|
|
|
|
@@map("users")
|
|
}
|
|
|
|
model VerificationToken {
|
|
id Int @id @default(autoincrement())
|
|
identifier String
|
|
token String @unique
|
|
expires DateTime
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
@@index([identifier])
|
|
@@map("verification_tokens")
|
|
}
|
|
|
|
model Meeting {
|
|
id Int @id @default(autoincrement())
|
|
uuid String @unique
|
|
title String
|
|
type MeetingType
|
|
status MeetingStatus @default(scheduled)
|
|
scheduledAt DateTime? @map("scheduled_at")
|
|
hostUserId Int @map("host_user_id")
|
|
startedAt DateTime? @map("started_at")
|
|
endedAt DateTime? @map("ended_at")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
host User @relation("MeetingHost", fields: [hostUserId], references: [id])
|
|
participants MeetingParticipant[]
|
|
notes Note[]
|
|
recordings Recording[]
|
|
|
|
@@index([uuid])
|
|
@@map("meetings")
|
|
}
|
|
|
|
model MeetingParticipant {
|
|
id Int @id @default(autoincrement())
|
|
meetingId Int @map("meeting_id")
|
|
userId Int? @map("user_id")
|
|
guestName String? @map("guest_name")
|
|
identity String
|
|
role ParticipantRole @default(participant)
|
|
status ParticipantStatus @default(pending)
|
|
requestedAt DateTime @default(now()) @map("requested_at")
|
|
admittedAt DateTime? @map("admitted_at")
|
|
leftAt DateTime? @map("left_at")
|
|
|
|
meeting Meeting @relation(fields: [meetingId], references: [id])
|
|
user User? @relation(fields: [userId], references: [id])
|
|
|
|
@@unique([meetingId, identity])
|
|
@@index([meetingId, status])
|
|
@@map("meeting_participants")
|
|
}
|
|
|
|
model Note {
|
|
id Int @id @default(autoincrement())
|
|
meetingId Int @map("meeting_id")
|
|
userId Int @map("user_id")
|
|
content String @db.Text
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
meeting Meeting @relation(fields: [meetingId], references: [id])
|
|
user User @relation(fields: [userId], references: [id])
|
|
|
|
@@unique([meetingId, userId])
|
|
@@map("notes")
|
|
}
|
|
|
|
model Recording {
|
|
id Int @id @default(autoincrement())
|
|
meetingId Int @map("meeting_id")
|
|
egressId String @map("egress_id")
|
|
status RecordingStatus @default(in_progress)
|
|
storagePath String? @map("storage_path")
|
|
fileSizeBytes BigInt? @map("file_size_bytes")
|
|
durationSeconds Int? @map("duration_seconds")
|
|
startedByUserId Int @map("started_by_user_id")
|
|
startedAt DateTime @default(now()) @map("started_at")
|
|
completedAt DateTime? @map("completed_at")
|
|
|
|
meeting Meeting @relation(fields: [meetingId], references: [id])
|
|
startedBy User @relation("RecordingStartedBy", fields: [startedByUserId], references: [id])
|
|
|
|
@@map("recordings")
|
|
}
|