92 lines
3.1 KiB
Text
92 lines
3.1 KiB
Text
generator client {
|
|
provider = "prisma-client"
|
|
output = "../src/generated/prisma"
|
|
engineType = "client"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
}
|
|
|
|
model Community {
|
|
id String @id @unique @default(uuid())
|
|
name String @unique
|
|
description String?
|
|
creationDate DateTime @default(now())
|
|
User User @relation(name: "OwnerCommunityToUser", fields: [ownerId], references: [id])
|
|
ownerId String
|
|
members User[] @relation(name: "MembersCommunitiesToUsers")
|
|
channels Channel[]
|
|
roles Role[]
|
|
invites Invite[]
|
|
}
|
|
|
|
model Channel {
|
|
id String @id @unique @default(uuid())
|
|
name String
|
|
description String?
|
|
community Community @relation(fields: [communityId], references: [id], onDelete: Cascade)
|
|
communityId String
|
|
creationDate DateTime @default(now())
|
|
messages Message[]
|
|
}
|
|
|
|
model Role {
|
|
id String @id @unique @default(uuid())
|
|
name String
|
|
description String?
|
|
community Community @relation(fields: [communityId], references: [id], onDelete: Cascade)
|
|
communityId String
|
|
users User[] @relation(name: "UsersRolesToUsers")
|
|
permissions String[]
|
|
creationDate DateTime @default(now())
|
|
}
|
|
|
|
model User {
|
|
id String @id @unique @default(uuid())
|
|
username String @unique
|
|
email String? @unique
|
|
passwordHash String?
|
|
description String?
|
|
admin Boolean @default(false)
|
|
registerDate DateTime @default(now())
|
|
lastLogin DateTime?
|
|
Session Session[]
|
|
ownedInvites Invite[]
|
|
ownedCommunities Community[] @relation(name: "OwnerCommunityToUser")
|
|
communities Community[] @relation(name: "MembersCommunitiesToUsers")
|
|
roles Role[] @relation(name: "UsersRolesToUsers")
|
|
messages Message[]
|
|
}
|
|
|
|
model Session {
|
|
id String @id @unique @default(uuid())
|
|
owner User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
userId String
|
|
cookie String
|
|
creationDate DateTime @default(now())
|
|
}
|
|
|
|
model Invite {
|
|
id String @id @unique @default(uuid())
|
|
Community Community @relation(fields: [communityId], references: [id], onDelete: Cascade)
|
|
communityId String
|
|
User User @relation(fields: [creatorId], references: [id], onDelete: Cascade)
|
|
creatorId String
|
|
totalInvites Int @default(0)
|
|
remainingInvites Int @default(0)
|
|
creationDate DateTime @default(now())
|
|
expirationDate DateTime?
|
|
}
|
|
|
|
model Message {
|
|
id String @id @unique @default(uuid())
|
|
text String
|
|
editHistory String[] @default([])
|
|
edited Boolean @default(false)
|
|
owner User @relation(fields: [ownerId], references: [id], onDelete: Cascade)
|
|
ownerId String
|
|
channel Channel @relation(fields: [channelId], references: [id], onDelete: Cascade)
|
|
channelId String
|
|
creationDate DateTime @default(now())
|
|
}
|