Skip to content

Instantly share code, notes, and snippets.

@drifterz13
Created December 16, 2024 07:47
Show Gist options
  • Select an option

  • Save drifterz13/133d16d9b8a1bd4b7886cffb6e549557 to your computer and use it in GitHub Desktop.

Select an option

Save drifterz13/133d16d9b8a1bd4b7886cffb6e549557 to your computer and use it in GitHub Desktop.
enum Gender {
MALE
FEMALE
OTHER
}
enum CreditSource {
INTERNAL
EXTERNAL
}
enum TransferStatus {
PENDING
APPROVED
REJECTED
}
model School {
id Int @id @default(autoincrement())
name String
students Student[]
subjects Subject[]
teachers Teacher[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("schools")
}
model Student {
id Int @id @default(autoincrement())
citizenId String @unique
birthDate DateTime
gender Gender
gpax Float
userId Int @unique
user User @relation(fields: [userId], references: [id])
schoolId Int
school School @relation(fields: [schoolId], references: [id])
enrollments Enrollment[]
creditTransferRequests CreditTransferRequest[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([schoolId])
@@map("students")
}
model Subject {
id Int @id @default(autoincrement())
code String @unique
title String
gradeLevel Int
credit Float
schoolId Int
school School @relation(fields: [schoolId], references: [id])
enrollments Enrollment[]
subjectMappings SubjectMapping[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
CreditTransferRequestSubject CreditTransferRequestSubject[]
@@index([schoolId])
@@map("subjects")
}
model Enrollment {
id Int @id @default(autoincrement())
studentId Int
student Student @relation(fields: [studentId], references: [id])
subjectId Int
subject Subject @relation(fields: [subjectId], references: [id])
gpa Float
creditSource CreditSource
transferredEnrollmentId Int? // Allows linking to a transferred enrollment
transferredEnrollment Enrollment? @relation("TransferredEnrollment", fields: [transferredEnrollmentId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
Enrollment Enrollment[]
@@index([studentId])
@@index([subjectId])
@@map("enrollments")
}
model CreditTransferRequest {
id Int @id @default(autoincrement())
studentId Int
student Student @relation(fields: [studentId], references: [id])
reviews CreditTransferReview[]
requestedSubjects CreditTransferRequestSubject[]
status TransferStatus @default(PENDING)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("credit_transfer_requests")
}
model CreditTransferReview {
id Int @id @default(autoincrement())
requestId Int
creditTransferRequest CreditTransferRequest @relation(fields: [requestId], references: [id])
teacherId Int
teacher Teacher @relation(fields: [teacherId], references: [id])
mappedSubjects SubjectMapping[]
comments String?
reviewStage Int
isFinalReview Boolean @default(false)
status TransferStatus @default(PENDING)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("credit_transfer_reviews")
}
model Teacher {
id Int @id @default(autoincrement())
userId Int @unique
user User @relation(fields: [userId], references: [id])
schoolId Int
school School @relation(fields: [schoolId], references: [id])
creditTransferReviews CreditTransferReview[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([schoolId])
@@map("teachers")
}
model SubjectMapping {
id Int @id @default(autoincrement())
sourceSubjectId Int
sourceSubject Subject @relation(fields: [sourceSubjectId], references: [id])
destinationSubjectId Int
destinationSubject Subject @relation(fields: [destinationSubjectId], references: [id])
creditTransferReviewId Int
creditTransferReview CreditTransferReview @relation(fields: [creditTransferReviewId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("subject_mappings")
}
model CreditTransferRequestSubject {
id Int @id @default(autoincrement())
requestId Int
creditTransferRequest CreditTransferRequest @relation(fields: [requestId], references: [id])
subjectId Int
subject Subject @relation(fields: [subjectId], references: [id])
isTransferred Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("credit_transfer_request_subjects")
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String
students Student?
teachers Teacher?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("users")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment