1
Fork 0
mirror of https://github.com/Steffo99/festa.git synced 2024-10-16 15:07:27 +00:00
festa/prisma/schema.prisma

128 lines
3.1 KiB
Text
Raw Normal View History

2022-05-20 12:20:45 +00:00
// 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"
2022-05-20 12:11:08 +00:00
}
2022-05-20 12:20:45 +00:00
datasource db {
2022-05-20 17:31:50 +00:00
provider = "postgresql"
2022-05-20 12:20:45 +00:00
url = env("DATABASE_URL")
}
2022-05-20 17:15:47 +00:00
/// An event is the representation of a gathering of people in a certain place at a certain time.
model Event {
2022-05-20 18:15:07 +00:00
id Int @id @default(autoincrement())
2022-05-20 17:43:47 +00:00
//
slug String
2022-05-20 18:15:07 +00:00
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
2022-05-20 17:43:47 +00:00
viewPassword String?
joinPassword String?
//
name String
description String
postcard String?
startTime DateTime?
endTime DateTime?
location String?
//
partecipants Partecipant[]
2022-05-20 18:15:07 +00:00
neededItems Item[]
vehicles Vehicle[]
2022-05-20 17:15:47 +00:00
}
/// A partecipant is a person who may or may not partecipate to the event.
model Partecipant {
2022-05-20 17:43:47 +00:00
id Int @id @default(autoincrement())
eventId Int
event Event @relation(fields: [eventId], references: [id])
2022-05-20 17:15:47 +00:00
//
2022-05-20 17:43:47 +00:00
name String
email String
2022-05-20 17:15:47 +00:00
//
2022-05-20 17:43:47 +00:00
means PartecipationMeans
createdAt DateTime @default(now())
joinedAt DateTime?
2022-05-20 17:15:47 +00:00
//
2022-05-20 17:43:47 +00:00
answer PartecipationAnswer
2022-05-20 18:15:07 +00:00
shouldBring Item[]
drives Vehicle[] @relation("VehicleDrive")
rides Vehicle[] @relation("VehicleRide")
2022-05-20 21:28:14 +00:00
expenses Transaction[] @relation("TransactionFrom")
income Transaction[] @relation("TransactionTo")
2022-05-20 17:15:47 +00:00
}
enum PartecipationMeans {
CREATOR
INVITED
ACCEPTED
JOINED
}
enum PartecipationAnswer {
HOST
YES
MAYBE
NO
PENDING
}
2022-05-20 17:43:47 +00:00
/// An item which should be bought and brought by somebody to the event.
2022-05-20 18:15:07 +00:00
model Item {
2022-05-20 17:43:47 +00:00
id Int @id @default(autoincrement())
eventId Int
event Event @relation(fields: [eventId], references: [id])
//
quantity Int
name String
purchased Boolean @default(false)
//
assignedId Int?
assigned Partecipant? @relation(fields: [assignedId], references: [id])
}
2022-05-20 18:15:07 +00:00
/// A vehicle which is being used to transport people from and to the event.
model Vehicle {
2022-05-20 18:17:25 +00:00
id Int @id @default(autoincrement())
eventId Int
event Event @relation(fields: [eventId], references: [id])
2022-05-20 18:15:07 +00:00
//
2022-05-20 18:17:25 +00:00
driverId Int
driver Partecipant @relation("VehicleDrive", fields: [driverId], references: [id])
riders Partecipant[] @relation("VehicleRide")
2022-05-20 18:15:07 +00:00
//
2022-05-20 18:17:25 +00:00
type VehicleType @default(CAR)
slots Int @default(4)
password String?
2022-05-20 18:15:07 +00:00
//
2022-05-20 18:17:25 +00:00
voyage VoyageType
location String
2022-05-20 18:15:07 +00:00
departureAt DateTime
2022-05-20 18:17:25 +00:00
arrivalAt DateTime
}
enum VehicleType {
CAR
OTHER
2022-05-20 18:15:07 +00:00
}
enum VoyageType {
TO
FROM
}
2022-05-20 21:28:14 +00:00
/// A monetary transaction related to the event.
model Transaction {
id Int @id @default(autoincrement())
//
fromId Int?
from Partecipant? @relation("TransactionFrom", fields: [fromId], references: [id])
toId Int?
to Partecipant? @relation("TransactionTo", fields: [toId], references: [id])
//
amount Decimal
currency String
reason String
}