Complete WatchLink V1 realtime features
This commit is contained in:
@@ -33,12 +33,20 @@ enum MediaProvider {
|
||||
UNKNOWN
|
||||
}
|
||||
|
||||
enum InviteStatus {
|
||||
ACTIVE
|
||||
REVOKED
|
||||
USED
|
||||
EXPIRED
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
username String @unique
|
||||
passwordHash String
|
||||
displayName String?
|
||||
avatarUrl String?
|
||||
disabledAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
roles UserRole[]
|
||||
@@ -47,6 +55,9 @@ model User {
|
||||
gotFriends Friendship[] @relation("FriendReceiver")
|
||||
roomMembers RoomMember[]
|
||||
submitted MediaSource[]
|
||||
messages RoomMessage[]
|
||||
auditEvents AuditEvent[]
|
||||
invites Invite[]
|
||||
}
|
||||
|
||||
model AppSetting {
|
||||
@@ -108,6 +119,7 @@ model Room {
|
||||
slug String @unique
|
||||
name String
|
||||
ownerId String?
|
||||
isPersonal Boolean @default(false)
|
||||
visibility RoomVisibility @default(FRIENDS)
|
||||
currentState Json?
|
||||
createdAt DateTime @default(now())
|
||||
@@ -115,6 +127,9 @@ model Room {
|
||||
owner User? @relation("RoomOwner", fields: [ownerId], references: [id], onDelete: SetNull)
|
||||
members RoomMember[]
|
||||
mediaSources MediaSource[]
|
||||
messages RoomMessage[]
|
||||
auditEvents AuditEvent[]
|
||||
invites Invite[]
|
||||
}
|
||||
|
||||
model RoomMember {
|
||||
@@ -141,3 +156,45 @@ model MediaSource {
|
||||
room Room @relation(fields: [roomId], references: [id], onDelete: Cascade)
|
||||
submitter User? @relation(fields: [submitterId], references: [id], onDelete: SetNull)
|
||||
}
|
||||
|
||||
model RoomMessage {
|
||||
id String @id @default(cuid())
|
||||
roomId String
|
||||
userId String?
|
||||
body String
|
||||
createdAt DateTime @default(now())
|
||||
room Room @relation(fields: [roomId], references: [id], onDelete: Cascade)
|
||||
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
|
||||
|
||||
@@index([roomId, createdAt])
|
||||
}
|
||||
|
||||
model AuditEvent {
|
||||
id String @id @default(cuid())
|
||||
actorId String?
|
||||
roomId String?
|
||||
action String
|
||||
metadata Json?
|
||||
createdAt DateTime @default(now())
|
||||
actor User? @relation(fields: [actorId], references: [id], onDelete: SetNull)
|
||||
room Room? @relation(fields: [roomId], references: [id], onDelete: SetNull)
|
||||
|
||||
@@index([roomId, createdAt])
|
||||
@@index([actorId, createdAt])
|
||||
}
|
||||
|
||||
model Invite {
|
||||
id String @id @default(cuid())
|
||||
code String @unique
|
||||
roomId String?
|
||||
creatorId String?
|
||||
status InviteStatus @default(ACTIVE)
|
||||
expiresAt DateTime?
|
||||
usedById String?
|
||||
usedAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
room Room? @relation(fields: [roomId], references: [id], onDelete: Cascade)
|
||||
creator User? @relation(fields: [creatorId], references: [id], onDelete: SetNull)
|
||||
|
||||
@@index([roomId, status])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user