nephthys/prisma/schema.prisma
2025-06-13 19:26:10 +01:00

89 lines
2.1 KiB
Text

generator client {
provider = "prisma-client-py"
interface = "asyncio"
recursive_type_depth = 5
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
enum TicketStatus {
OPEN
IN_PROGRESS
CLOSED
}
model User {
id String @id @unique
username String? @unique
admin Boolean @default(false)
openedTickets Ticket[] @relation("OpenedTickets")
closedTickets Ticket[] @relation("ClosedTickets")
assignedTickets Ticket[] @relation("AssignedTickets")
tagSubscriptions UserTagSubscription[]
helper Boolean @default(false)
createdAt DateTime @default(now())
}
model Ticket {
id String @id @unique @default(cuid())
title String
description String
status TicketStatus @default(OPEN)
msgTs String @unique
ticketTs String @unique
openedBy User @relation("OpenedTickets", fields: [openedById], references: [id])
openedById String
closedBy User? @relation("ClosedTickets", fields: [closedById], references: [id])
closedById String?
closedAt DateTime?
assignedTo User? @relation("AssignedTickets", fields: [assignedToId], references: [id])
assignedToId String?
tagsOnTickets TagsOnTickets[]
createdAt DateTime @default(now())
}
model Tag {
id String @id @unique @default(cuid())
name String @unique
ticketsOnTags TagsOnTickets[]
userSubscriptions UserTagSubscription[]
createdAt DateTime @default(now())
}
model TagsOnTickets {
ticket Ticket @relation(fields: [ticketId], references: [id], onDelete: Cascade)
ticketId String
tag Tag @relation(fields: [tagId], references: [id], onDelete: Cascade)
tagId String
assignedAt DateTime @default(now())
@@id([ticketId, tagId])
@@map("tags_on_tickets")
}
model UserTagSubscription {
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId String
tag Tag @relation(fields: [tagId], references: [id], onDelete: Cascade)
tagId String
subscribedAt DateTime @default(now())
@@id([userId, tagId])
@@map("user_tag_subscriptions")
}