desker/apps/api/prisma/schema.prisma

88 lines
2.2 KiB
Plaintext

// apps/api/prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
enum Role {
ADMIN
SUPERVISOR
EMPLOYEE
}
enum SpaceType {
DESK
MEETING_ROOM
AMENITY
}
model Organization {
id String @id @default(uuid())
name String
buildings Building[]
users User[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Building {
id String @id @default(uuid())
name String
organization Organization @relation(fields: [organizationId], references: [id])
organizationId String
floors Floor[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Floor {
id String @id @default(uuid())
number Int
building Building @relation(fields: [buildingId], references: [id])
buildingId String
spaces Space[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Space {
id String @id @default(uuid())
name String
type SpaceType
floor Floor @relation(fields: [floorId], references: [id])
floorId String
x Float? // Percentage-based for responsiveness (Stage 3)
y Float?
reservations Reservation[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model User {
id String @id @default(uuid())
email String @unique
password String
role Role @default(EMPLOYEE)
organization Organization @relation(fields: [organizationId], references: [id])
organizationId String
reservations Reservation[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Reservation {
id String @id @default(uuid())
startTime DateTime
endTime DateTime
user User @relation(fields: [userId], references: [id])
userId String
space Space @relation(fields: [spaceId], references: [id])
spaceId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}