377 lines
12 KiB
Plaintext
Executable File
377 lines
12 KiB
Plaintext
Executable File
// This is your Prisma schema file,
|
|
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
|
|
|
// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
|
|
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
|
|
|
|
generator client {
|
|
provider = "prisma-client-js"
|
|
output = "../src/generated/prisma"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "mysql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model Admin {
|
|
id Int @id @default(autoincrement())
|
|
nama_depan String @db.VarChar(255)
|
|
nama_belakang String @db.VarChar(255)
|
|
role Role @default(admin)
|
|
email String @unique @db.VarChar(255)
|
|
password String @db.Text
|
|
signature String? @db.Text // singature untuk identifikasi auth jwt (best practice)
|
|
|
|
profile_picture String? @db.Text
|
|
professional_bio String? @db.Text
|
|
|
|
projects Project[]
|
|
notifications Notification[]
|
|
|
|
@@map("admin")
|
|
}
|
|
|
|
model HasilResearch {
|
|
id Int @id @default(autoincrement())
|
|
image_path String @db.Text
|
|
nama_project String @db.VarChar(255)
|
|
deskripsi String @db.VarChar(255)
|
|
link_project String @db.Text
|
|
created_at DateTime @default(now())
|
|
|
|
@@map("hasil_research")
|
|
}
|
|
|
|
model LamaranMagang {
|
|
id Int @id @default(autoincrement())
|
|
id_mahasiswa Int
|
|
id_lowongan_magang String @db.VarChar(255)
|
|
status StatusLamaran
|
|
batch Int?
|
|
|
|
created_at DateTime @default(now())
|
|
update_at DateTime
|
|
|
|
user User?
|
|
batch_data Batch? @relation(fields: [batch], references: [id], map: "lamaran_magang_batch_foreign")
|
|
mahasiswa Mahasiswa @relation(fields: [id_mahasiswa], references: [id], map: "lamaran_magang_id_mahasiswa_foreign")
|
|
lowongan_magang LowonganMagang @relation(fields: [id_lowongan_magang], references: [id], map: "lamaran_magang_id_lowongan_magang_foreign")
|
|
|
|
@@index([id_mahasiswa], map: "lamaran_magang_id_mahasiswa_foreign")
|
|
@@index([id_lowongan_magang], map: "lamaran_magang_id_lowongan_magang_foreign")
|
|
@@index([batch])
|
|
@@map("lamaran_magang")
|
|
}
|
|
|
|
model LowonganMagang {
|
|
id String @id @db.VarChar(255)
|
|
posisi String @db.VarChar(255)
|
|
kelompok_peminatan String @db.VarChar(255)
|
|
image_path String @db.Text
|
|
jobdesk String @db.Text
|
|
lokasi String @db.VarChar(255)
|
|
kualifikasi String @db.Text
|
|
benefit String @db.Text
|
|
durasi_awal DateTime @db.Date
|
|
durasi_akhir DateTime @db.Date
|
|
id_batch Int
|
|
batch Batch @relation(fields: [id_batch], references: [id], map: "lowongan_magang_id_batch_foreign")
|
|
status_lowongan StatusLowongan
|
|
paid PaidStatus
|
|
created_at DateTime @default(now())
|
|
|
|
lamaran_magang LamaranMagang[]
|
|
|
|
@@index([id_batch], map: "lowongan_magang_id_batch_foreign")
|
|
@@map("lowongan_magang")
|
|
}
|
|
|
|
model Mahasiswa {
|
|
id Int @id @default(autoincrement())
|
|
nama_depan String @db.VarChar(255)
|
|
nama_belakang String? @db.VarChar(255)
|
|
email String @unique @db.VarChar(255)
|
|
kontak String @db.VarChar(255)
|
|
jurusan String @db.VarChar(255)
|
|
universitas String @db.VarChar(255)
|
|
negara String @db.VarChar(255)
|
|
role StudentRole @default(student)
|
|
cv_path String @db.Text
|
|
portofolio_path String @db.Text
|
|
motivasi String @db.Text
|
|
relevant_skills String @db.VarChar(255)
|
|
|
|
user User?
|
|
lamaran_magang LamaranMagang[]
|
|
|
|
@@map("mahasiswa")
|
|
}
|
|
|
|
model Partnership {
|
|
id Int @id @default(autoincrement())
|
|
nama_partner String @db.VarChar(255)
|
|
image_path String @db.Text
|
|
created_at DateTime @default(now())
|
|
|
|
@@map("partnership")
|
|
}
|
|
|
|
model Faq {
|
|
id Int @id @default(autoincrement())
|
|
pertanyaan String @db.Text
|
|
jawaban String @db.Text
|
|
created_at DateTime @default(now())
|
|
|
|
@@map("faq")
|
|
}
|
|
|
|
model RiwayatPelamar {
|
|
id Int @id @default(autoincrement())
|
|
batch Int
|
|
negara String? @db.VarChar(255)
|
|
posisi String? @db.VarChar(255)
|
|
tahun Int
|
|
jumlah Int
|
|
pelamar_diterima Int
|
|
pelamar_ditolak Int
|
|
pelamar_diproses Int
|
|
presentase_diterima Float
|
|
presentase_ditolak Float
|
|
presentase_diproses Float
|
|
|
|
created_at DateTime @default(now())
|
|
|
|
@@unique([batch, negara, posisi])
|
|
@@index([batch])
|
|
@@index([negara])
|
|
@@index([posisi])
|
|
@@map("riwayat_pelamar")
|
|
}
|
|
|
|
model Feedback {
|
|
id Int @id @default(autoincrement())
|
|
nama String @db.VarChar(255)
|
|
universitas String @db.VarChar(255)
|
|
pesan String @db.Text
|
|
batch Int
|
|
posisi String @db.VarChar(255)
|
|
tahun Int
|
|
image_path String @db.Text
|
|
|
|
created_at DateTime @default(now())
|
|
|
|
@@map("feedback")
|
|
}
|
|
|
|
model Batch {
|
|
id Int @id @default(autoincrement())
|
|
batch_number Int @unique
|
|
is_active Boolean @default(false)
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime @updatedAt
|
|
lowongan_magang LowonganMagang[]
|
|
lamaranMagangs LamaranMagang[]
|
|
|
|
@@index([is_active])
|
|
@@index([batch_number])
|
|
@@map("batch")
|
|
}
|
|
|
|
model User {
|
|
id Int @id @default(autoincrement())
|
|
id_mahasiswa Int? @unique
|
|
id_lamaran_magang Int? @unique
|
|
full_name String @db.VarChar(255)
|
|
email String @unique @db.VarChar(255)
|
|
password String @db.Text
|
|
role Role @default(intern)
|
|
professional_bio String? @db.Text
|
|
intern_position String? @db.VarChar(255)
|
|
intern_interest_group String? @db.VarChar(255)
|
|
is_active Boolean @default(true)
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime @updatedAt
|
|
|
|
mahasiswa Mahasiswa? @relation(fields: [id_mahasiswa], references: [id], onDelete: SetNull, map: "user_id_mahasiswa_foreign")
|
|
lamaran_magang LamaranMagang? @relation(fields: [id_lamaran_magang], references: [id], onDelete: SetNull, map: "user_id_lamaran_magang_foreign")
|
|
project_members ProjectMember[]
|
|
task_submissions TaskSubmission[]
|
|
certificates Certificate[]
|
|
notifications Notification[]
|
|
|
|
@@index([email])
|
|
@@map("user")
|
|
}
|
|
|
|
model Project {
|
|
id Int @id @default(autoincrement())
|
|
id_admin Int //mentor project
|
|
slug String @unique @db.VarChar(255)
|
|
project_icon ProjectIcon @default(code)
|
|
background_color String @default("#BA1A1A") @db.VarChar(20)
|
|
project_name String @db.VarChar(255)
|
|
description String @db.Text
|
|
start_date DateTime @db.Date
|
|
end_date DateTime @db.Date
|
|
status ProjectStatus @default(active)
|
|
certificate_template String? @db.Text
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime @updatedAt
|
|
|
|
admin Admin @relation(fields: [id_admin], references: [id], map: "project_id_admin_foreign")
|
|
members ProjectMember[]
|
|
tasks Task[]
|
|
certificates Certificate[]
|
|
|
|
@@index([id_admin], map: "project_id_admin_foreign")
|
|
@@index([status])
|
|
@@map("project")
|
|
}
|
|
|
|
model ProjectMember {
|
|
id Int @id @default(autoincrement())
|
|
id_project Int
|
|
id_user Int
|
|
status ProjectMemberStatus @default(active)
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime @updatedAt
|
|
|
|
project Project @relation(fields: [id_project], references: [id], map: "project_member_id_project_foreign")
|
|
user User @relation(fields: [id_user], references: [id], map: "project_member_id_user_foreign")
|
|
|
|
@@unique([id_project, id_user])
|
|
@@index([id_project], map: "project_member_id_project_foreign")
|
|
@@index([id_user], map: "project_member_id_user_foreign")
|
|
@@index([status])
|
|
@@map("project_member")
|
|
}
|
|
|
|
model Task {
|
|
id Int @id @default(autoincrement())
|
|
id_project Int
|
|
slug String @db.VarChar(255)
|
|
title String @db.VarChar(255)
|
|
description String @db.Text
|
|
deadline_at DateTime
|
|
submission_type SubmissionType
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime @updatedAt
|
|
|
|
project Project @relation(fields: [id_project], references: [id], map: "task_id_project_foreign")
|
|
submissions TaskSubmission[]
|
|
|
|
@@unique([id_project, slug])
|
|
@@index([id_project], map: "task_id_project_foreign")
|
|
@@index([deadline_at])
|
|
@@index([slug])
|
|
@@map("task")
|
|
}
|
|
|
|
model TaskSubmission {
|
|
id Int @id @default(autoincrement())
|
|
id_task Int
|
|
id_user Int
|
|
file_path String? @db.Text
|
|
url_link String? @db.Text
|
|
submitted_at DateTime @default(now())
|
|
updated_at DateTime @updatedAt
|
|
|
|
task Task @relation(fields: [id_task], references: [id], map: "task_submission_id_task_foreign")
|
|
user User @relation(fields: [id_user], references: [id], map: "task_submission_id_user_foreign")
|
|
|
|
@@unique([id_task, id_user])
|
|
@@index([id_task], map: "task_submission_id_task_foreign")
|
|
@@index([id_user], map: "task_submission_id_user_foreign")
|
|
@@map("task_submission")
|
|
}
|
|
|
|
enum Role {
|
|
admin
|
|
mentor
|
|
intern
|
|
}
|
|
|
|
enum StudentRole {
|
|
student
|
|
}
|
|
|
|
enum StatusLamaran {
|
|
diterima
|
|
diproses
|
|
ditolak
|
|
}
|
|
|
|
enum StatusLowongan {
|
|
dibuka
|
|
ditutup
|
|
}
|
|
|
|
enum PaidStatus {
|
|
paid
|
|
unpaid
|
|
}
|
|
|
|
enum ProjectIcon {
|
|
code
|
|
chart
|
|
cloud
|
|
mobile
|
|
gear
|
|
users
|
|
clipboard
|
|
speedometer
|
|
lightbulb
|
|
shield
|
|
}
|
|
|
|
enum ProjectStatus {
|
|
active
|
|
completed
|
|
archived
|
|
}
|
|
|
|
enum ProjectMemberStatus {
|
|
active
|
|
removed
|
|
}
|
|
|
|
enum SubmissionType {
|
|
file_upload
|
|
url_link
|
|
}
|
|
|
|
model Certificate {
|
|
id Int @id @default(autoincrement())
|
|
uuid String @unique @default(uuid()) @db.VarChar(36)
|
|
id_project Int
|
|
id_user Int
|
|
certificate_no String @unique @db.VarChar(255)
|
|
issued_at DateTime @default(now())
|
|
|
|
project Project @relation(fields: [id_project], references: [id], map: "certificate_id_project_foreign")
|
|
user User @relation(fields: [id_user], references: [id], map: "certificate_id_user_foreign")
|
|
|
|
@@unique([id_project, id_user])
|
|
@@index([id_project], map: "certificate_id_project_foreign")
|
|
@@index([id_user], map: "certificate_id_user_foreign")
|
|
@@map("certificate")
|
|
}
|
|
|
|
model Notification {
|
|
id Int @id @default(autoincrement())
|
|
id_user Int? // For interns
|
|
id_admin Int? // For mentors/admins
|
|
title String @db.VarChar(255)
|
|
message String @db.Text
|
|
is_read Boolean @default(false)
|
|
created_at DateTime @default(now())
|
|
|
|
user User? @relation(fields: [id_user], references: [id], onDelete: Cascade)
|
|
admin Admin? @relation(fields: [id_admin], references: [id], onDelete: Cascade)
|
|
|
|
@@index([id_user])
|
|
@@index([id_admin])
|
|
@@map("notification")
|
|
}
|