initial commit - code moved to separate repo
This commit is contained in:
275
prisma/schema.prisma
Normal file
275
prisma/schema.prisma
Normal file
@ -0,0 +1,275 @@
|
||||
// This is your Prisma schema file,
|
||||
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
||||
|
||||
// // https://dev.to/connelevalsam/a-simple-crud-app-with-nextjs-prisma-sqlite-and-flutter-3oe1
|
||||
// > npx prisma
|
||||
|
||||
// // to update prisma DB/generate migration
|
||||
// >npx prisma migrate dev
|
||||
|
||||
// //to generate schema
|
||||
// > npx prisma
|
||||
|
||||
// GPT
|
||||
// This is a Prisma database schema definition, which describes the structure and relationships between various entities in the database. Here's a brief overview of the different models:
|
||||
|
||||
// Publisher: Represents a publisher, with attributes such as first name, last name, email, phone, age, and availability. A publisher can have many availabilities and assignments, and can also have multiple user accounts and sessions.
|
||||
// Availability: Represents the availability of a publisher on a specific day and time range. An availability belongs to a publisher and can have a name, day of the week, day of the month, start time, and end time.
|
||||
// CartEvent: Represents a cart event, which is an event that requires a certain number of publishers to work. A cart event has a start and end time, a duration, and can have multiple shifts. It also has a location and an event type.
|
||||
// Shift: Represents a shift, which is a specific time period during a cart event where one or more publishers are required to work. A shift belongs to a cart event and can have a name, start and end time, and can require transport.
|
||||
// Assignment: Represents an assignment of a publisher to a specific shift. An assignment belongs to a shift and a publisher and can be tentative or final.
|
||||
// Location: Represents a location where a cart event can take place. A location can have a name, address, and multiple cart events.
|
||||
// Overall, this schema seems to represent a system for managing publishers and their assignments to cart events, including their availabilities and locations.
|
||||
|
||||
datasource db {
|
||||
provider = "mysql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
binaryTargets = ["native", "debian-openssl-3.0.x"]
|
||||
}
|
||||
|
||||
// graphql schema generator
|
||||
// https://github.com/prisma-korea/graphql-schema-generator
|
||||
// generator graphql {
|
||||
// provider = "graphql-schema-generator"
|
||||
// createCRUD = "true"
|
||||
// // # output = "./generated" This is default path.
|
||||
// }
|
||||
|
||||
enum UserRole {
|
||||
ADMIN
|
||||
POWERUSER
|
||||
USER
|
||||
EXTERNAL
|
||||
}
|
||||
|
||||
enum EventType {
|
||||
PW_Cart
|
||||
KH_Cleaning
|
||||
}
|
||||
|
||||
//prisma type for day of week for sqlite db
|
||||
enum DayOfWeek {
|
||||
Monday
|
||||
Tuesday
|
||||
Wednesday
|
||||
Thursday
|
||||
Friday
|
||||
Saturday
|
||||
Sunday
|
||||
}
|
||||
|
||||
enum AvailabilityType {
|
||||
Weekly
|
||||
Monthly
|
||||
OneTime
|
||||
PreviousAssignment
|
||||
ReplacementOnly
|
||||
}
|
||||
|
||||
// Вестител
|
||||
// Бетелит
|
||||
// Редовен Пионер
|
||||
// Специален Пионер/Мисионер
|
||||
enum PublisherType {
|
||||
Publisher
|
||||
Bethelite
|
||||
RegularPioneer
|
||||
SpecialPioneer_Missionary
|
||||
}
|
||||
|
||||
model Publisher {
|
||||
id String @id @default(cuid())
|
||||
firstName String
|
||||
lastName String
|
||||
email String @unique
|
||||
phone String?
|
||||
isactive Boolean @default(true)
|
||||
isImported Boolean @default(false)
|
||||
isTrained Boolean @default(false)
|
||||
age Int?
|
||||
availabilities Availability[]
|
||||
assignments Assignment[]
|
||||
|
||||
// Optional relation to User
|
||||
userId String? @unique
|
||||
user User? @relation(fields: [userId], references: [id])
|
||||
|
||||
role UserRole @default(USER)
|
||||
desiredShiftsPerMonth Int @default(4)
|
||||
isMale Boolean @default(true)
|
||||
isNameForeign Boolean @default(false)
|
||||
|
||||
familyHeadId String? // Optional familyHeadId for each family member
|
||||
familyHead Publisher? @relation("FamilyMember", fields: [familyHeadId], references: [id])
|
||||
familyMembers Publisher[] @relation("FamilyMember")
|
||||
type PublisherType @default(Publisher)
|
||||
town String?
|
||||
comments String?
|
||||
reports Report[]
|
||||
|
||||
@@map("Publisher")
|
||||
}
|
||||
|
||||
model Availability {
|
||||
id Int @id @default(autoincrement())
|
||||
publisher Publisher @relation(fields: [publisherId], references: [id], onDelete: Cascade)
|
||||
publisherId String
|
||||
name String
|
||||
dayofweek DayOfWeek
|
||||
dayOfMonth Int?
|
||||
weekOfMonth Int?
|
||||
startTime DateTime
|
||||
endTime DateTime
|
||||
isactive Boolean @default(true)
|
||||
type AvailabilityType @default(Weekly)
|
||||
isWithTransportIn Boolean @default(false)
|
||||
isWithTransportOut Boolean @default(false)
|
||||
isFromPreviousAssignment Boolean @default(false)
|
||||
isFromPreviousMonth Boolean @default(false)
|
||||
repeatWeekly Boolean? // New field to indicate weekly repetition
|
||||
repeatFrequency Int? // New field to indicate repetition frequency
|
||||
endDate DateTime? // New field for the end date of repetition
|
||||
|
||||
@@map("Availability")
|
||||
}
|
||||
|
||||
model CartEvent {
|
||||
id Int @id @default(autoincrement())
|
||||
startTime DateTime
|
||||
endTime DateTime
|
||||
shiftDuration Int
|
||||
shifts Shift[]
|
||||
dayofweek DayOfWeek
|
||||
isactive Boolean @default(true)
|
||||
location Location @relation(fields: [locationId], references: [id])
|
||||
locationId Int
|
||||
eventType EventType @default(PW_Cart)
|
||||
numberOfPublishers Int @default(3)
|
||||
|
||||
@@map("CartEvent")
|
||||
}
|
||||
|
||||
model Shift {
|
||||
id Int @id @default(autoincrement())
|
||||
cartEvent CartEvent @relation(fields: [cartEventId], references: [id], onDelete: Cascade)
|
||||
cartEventId Int
|
||||
assignments Assignment[]
|
||||
name String
|
||||
startTime DateTime
|
||||
endTime DateTime
|
||||
isactive Boolean @default(true)
|
||||
requiresTransport Boolean @default(false)
|
||||
notes String?
|
||||
//date DateTime
|
||||
reportId Int? @unique
|
||||
Report Report? @relation(fields: [reportId], references: [id])
|
||||
|
||||
@@map("Shift")
|
||||
}
|
||||
|
||||
model Assignment {
|
||||
id Int @id @default(autoincrement())
|
||||
shift Shift @relation(fields: [shiftId], references: [id], onDelete: Cascade)
|
||||
shiftId Int
|
||||
publisher Publisher @relation(fields: [publisherId], references: [id], onDelete: Cascade)
|
||||
publisherId String
|
||||
isTentative Boolean @default(false) // if no availability for it, when importing previous schedules
|
||||
isConfirmed Boolean @default(false)
|
||||
isWithTransport Boolean @default(false)
|
||||
isMailSent Boolean @default(false)
|
||||
publicGuid String? @unique
|
||||
|
||||
@@map("Assignment")
|
||||
}
|
||||
|
||||
model Location {
|
||||
id Int @id @default(autoincrement())
|
||||
name String
|
||||
address String
|
||||
isactive Boolean @default(true)
|
||||
content String? @db.LongText
|
||||
cartEvents CartEvent[]
|
||||
reports Report[]
|
||||
picture1 String?
|
||||
picture2 String?
|
||||
picture3 String?
|
||||
|
||||
backupLocationId Int?
|
||||
backupLocation Location? @relation("BackupLocation", fields: [backupLocationId], references: [id])
|
||||
BackupForLocations Location[] @relation("BackupLocation")
|
||||
|
||||
@@map("Location")
|
||||
}
|
||||
|
||||
model Report {
|
||||
id Int @id @default(autoincrement())
|
||||
date DateTime
|
||||
publisherId String
|
||||
publisher Publisher @relation(fields: [publisherId], references: [id], onDelete: Cascade)
|
||||
locationId Int?
|
||||
location Location? @relation(fields: [locationId], references: [id])
|
||||
shift Shift?
|
||||
|
||||
placementCount Int?
|
||||
videoCount Int?
|
||||
returnVisitInfoCount Int?
|
||||
conversationCount Int?
|
||||
|
||||
experienceInfo String? @db.LongText
|
||||
|
||||
@@map("Report")
|
||||
}
|
||||
|
||||
//user auth and session management
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
name String?
|
||||
email String? @unique
|
||||
emailVerified DateTime?
|
||||
image String?
|
||||
accounts Account[]
|
||||
sessions Session[]
|
||||
|
||||
// Optional relation to Publisher
|
||||
publisherId String? @unique
|
||||
publisher Publisher? @relation
|
||||
}
|
||||
|
||||
model Account {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
type String
|
||||
provider String
|
||||
providerAccountId String
|
||||
refresh_token String?
|
||||
access_token String?
|
||||
expires_at Int?
|
||||
token_type String?
|
||||
scope String?
|
||||
id_token String?
|
||||
session_state String?
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([provider, providerAccountId])
|
||||
}
|
||||
|
||||
model Session {
|
||||
id String @id @default(cuid())
|
||||
sessionToken String @unique
|
||||
userId String
|
||||
expires DateTime
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model VerificationToken {
|
||||
identifier String
|
||||
token String @unique
|
||||
expires DateTime
|
||||
|
||||
@@unique([identifier, token])
|
||||
}
|
Reference in New Issue
Block a user