weddingsite/prisma/schema.prisma

130 lines
No EOL
3.3 KiB
Text

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("POSTGRES_URL_NON_POOLING")
}
model User {
id String @id @default(uuid())
username String @unique
roles UserRole[]
auth_session Session[]
key Key[]
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@map("users")
}
enum RSVP_STATUS {
INVITED
ACCEPTED
DECLINED
}
model Guest {
id String @id @default(uuid())
first_name String
last_name String
rsvp_status RSVP_STATUS
dietary_notes String
song_requests String
has_plus_one Boolean @default(false)
plus_one Boolean @default(false)
plus_one_first_name String?
plus_one_last_name String?
group Group @relation(fields: [group_id], references: [id])
group_id String
@@map("guests")
}
model Group {
id String @id @default(uuid())
name String
note String
rsvp_submitted Boolean @default(false)
guests Guest[]
@@map("groups")
}
model Role {
id String @id @default(uuid())
name String @unique
user_roles UserRole[]
role_permissions RolePermission[]
@@map("roles")
}
model UserRole {
id String @id @default(uuid())
user User @relation(fields: [user_id], references: [id])
user_id String
role Role @relation(fields: [role_id], references: [id])
role_id String
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@unique([user_id, role_id])
@@index([user_id])
@@index([role_id])
@@map("user_roles")
}
enum PERMISSION_NAME {
VIEW_USER
MODIFY_USER
}
model Permission {
id String @id @default(uuid())
name PERMISSION_NAME
description String
role_permissions RolePermission[]
@@map("permissions")
}
model RolePermission {
id String @id @default(uuid())
role Role @relation(fields: [role_id], references: [id], onDelete: Cascade)
role_id String
permission Permission @relation(fields: [permission_id], references: [id], onDelete: Cascade)
permission_id String
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@map("role_permissions")
}
model Key {
id String @id @default(uuid())
hashed_password String?
user_id String
user User @relation(references: [id], fields: [user_id], onDelete: Cascade)
@@index([user_id])
@@map("keys")
}
model Session {
id String @id @default(uuid())
user_id String
active_expires BigInt
idle_expires BigInt
user User @relation(references: [id], fields: [user_id], onDelete: Cascade)
created_at DateTime @default(now()) @db.Timestamp(6)
updated_at DateTime @updatedAt @db.Timestamp(6)
@@index([user_id])
@@map("sessions")
}