refactor: rewrite ke codebase lama
This commit is contained in:
Regular → Executable
+110
-63
@@ -1,43 +1,139 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE `user` (
|
||||
`id` VARCHAR(191) NOT NULL,
|
||||
CREATE TABLE `admin` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`nama_depan` VARCHAR(255) NOT NULL,
|
||||
`nama_belakang` VARCHAR(255) NOT NULL,
|
||||
`role` ENUM('admin') NOT NULL DEFAULT 'admin',
|
||||
`email` VARCHAR(255) NOT NULL,
|
||||
`password_hash` TEXT NOT NULL,
|
||||
`role` ENUM('ADMIN', 'STUDENT') NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`password` TEXT NOT NULL,
|
||||
`signature` TEXT NULL,
|
||||
|
||||
UNIQUE INDEX `user_email_key`(`email`),
|
||||
UNIQUE INDEX `admin_email_key`(`email`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `admin` (
|
||||
CREATE TABLE `hasil_research` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`id_user` VARCHAR(191) NOT NULL,
|
||||
`nama_depan` VARCHAR(255) NOT NULL,
|
||||
`nama_belakang` VARCHAR(255) NULL,
|
||||
`image_path` TEXT NOT NULL,
|
||||
`nama_project` VARCHAR(255) NOT NULL,
|
||||
`deskripsi` VARCHAR(255) NOT NULL,
|
||||
`link_project` TEXT NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `lamaran_magang` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`id_mahasiswa` INTEGER NOT NULL,
|
||||
`id_lowongan_magang` VARCHAR(255) NOT NULL,
|
||||
`status` ENUM('diterima', 'diproses', 'ditolak') NOT NULL,
|
||||
`batch` INTEGER NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`update_at` DATETIME(3) NOT NULL,
|
||||
|
||||
INDEX `lamaran_magang_id_mahasiswa_foreign`(`id_mahasiswa`),
|
||||
INDEX `lamaran_magang_id_lowongan_magang_foreign`(`id_lowongan_magang`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `lowongan_magang` (
|
||||
`id` VARCHAR(255) NOT NULL,
|
||||
`posisi` VARCHAR(255) NOT NULL,
|
||||
`kelompok_peminatan` VARCHAR(255) NOT NULL,
|
||||
`image_path` TEXT NOT NULL,
|
||||
`jobdesk` TEXT NOT NULL,
|
||||
`lokasi` VARCHAR(255) NOT NULL,
|
||||
`kualifikasi` TEXT NOT NULL,
|
||||
`benefit` TEXT NOT NULL,
|
||||
`durasi_awal` DATE NOT NULL,
|
||||
`durasi_akhir` DATE NOT NULL,
|
||||
`batch` INTEGER NULL,
|
||||
`status_lowongan` ENUM('dibuka', 'ditutup') NOT NULL,
|
||||
`paid` ENUM('paid', 'unpaid') NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
UNIQUE INDEX `admin_id_user_key`(`id_user`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `mahasiswa` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`id_user` VARCHAR(191) NOT NULL,
|
||||
`nama_depan` VARCHAR(255) NOT NULL,
|
||||
`nama_belakang` VARCHAR(255) NULL,
|
||||
`email` VARCHAR(255) NOT NULL,
|
||||
`kontak` VARCHAR(255) NOT NULL,
|
||||
`jurusan` VARCHAR(255) NOT NULL,
|
||||
`universitas` VARCHAR(255) NOT NULL,
|
||||
`negara` VARCHAR(255) NOT NULL,
|
||||
`role` ENUM('student') NOT NULL DEFAULT 'student',
|
||||
`cv_path` TEXT NOT NULL,
|
||||
`portofolio_path` TEXT NOT NULL,
|
||||
`motivasi` TEXT NOT NULL,
|
||||
`relevant_skills` VARCHAR(255) NOT NULL,
|
||||
|
||||
UNIQUE INDEX `mahasiswa_id_user_key`(`id_user`),
|
||||
UNIQUE INDEX `mahasiswa_email_key`(`email`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `partnership` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`nama_partner` VARCHAR(255) NOT NULL,
|
||||
`image_path` TEXT NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `faq` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`pertanyaan` TEXT NOT NULL,
|
||||
`jawaban` TEXT NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `riwayat_pelamar` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`batch` INTEGER NOT NULL,
|
||||
`negara` VARCHAR(255) NULL,
|
||||
`posisi` VARCHAR(255) NULL,
|
||||
`tahun` INTEGER NOT NULL,
|
||||
`jumlah` INTEGER NOT NULL,
|
||||
`pelamar_diterima` INTEGER NOT NULL,
|
||||
`pelamar_ditolak` INTEGER NOT NULL,
|
||||
`pelamar_diproses` INTEGER NOT NULL,
|
||||
`presentase_diterima` DOUBLE NOT NULL,
|
||||
`presentase_ditolak` DOUBLE NOT NULL,
|
||||
`presentase_diproses` DOUBLE NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
INDEX `riwayat_pelamar_batch_idx`(`batch`),
|
||||
INDEX `riwayat_pelamar_negara_idx`(`negara`),
|
||||
INDEX `riwayat_pelamar_posisi_idx`(`posisi`),
|
||||
UNIQUE INDEX `riwayat_pelamar_batch_negara_posisi_key`(`batch`, `negara`, `posisi`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `feedback` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`nama` VARCHAR(255) NOT NULL,
|
||||
`universitas` VARCHAR(255) NOT NULL,
|
||||
`pesan` TEXT NOT NULL,
|
||||
`batch` INTEGER NOT NULL,
|
||||
`posisi` VARCHAR(255) NOT NULL,
|
||||
`tahun` INTEGER NOT NULL,
|
||||
`image_path` TEXT NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
@@ -55,55 +151,6 @@ CREATE TABLE `batch` (
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `lowongan_magang` (
|
||||
`id` VARCHAR(255) NOT NULL,
|
||||
`id_batch` INTEGER NOT NULL,
|
||||
`posisi` VARCHAR(255) NOT NULL,
|
||||
`kelompok_peminatan` VARCHAR(255) NOT NULL,
|
||||
`image_path` TEXT NOT NULL,
|
||||
`jobdesk` TEXT NOT NULL,
|
||||
`lokasi` VARCHAR(255) NOT NULL,
|
||||
`kualifikasi` TEXT NOT NULL,
|
||||
`benefit` TEXT NOT NULL,
|
||||
`durasi_awal` DATE NOT NULL,
|
||||
`durasi_akhir` DATE NOT NULL,
|
||||
`status_lowongan` ENUM('DIBUKA', 'DITUTUP') NOT NULL,
|
||||
`paid` ENUM('PAID', 'UNPAID') NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
INDEX `lowongan_magang_id_batch_foreign`(`id_batch`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `lamaran_magang` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`id_mahasiswa` INTEGER NOT NULL,
|
||||
`id_lowongan_magang` VARCHAR(255) NOT NULL,
|
||||
`status` ENUM('DITERIMA', 'DIPROSES', 'DITOLAK') NOT NULL,
|
||||
`batch` INTEGER NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
|
||||
INDEX `lamaran_magang_id_mahasiswa_foreign`(`id_mahasiswa`),
|
||||
INDEX `lamaran_magang_id_lowongan_magang_foreign`(`id_lowongan_magang`),
|
||||
INDEX `lamaran_magang_batch_idx`(`batch`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `admin` ADD CONSTRAINT `admin_id_user_foreign` FOREIGN KEY (`id_user`) REFERENCES `user`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `mahasiswa` ADD CONSTRAINT `mahasiswa_id_user_foreign` FOREIGN KEY (`id_user`) REFERENCES `user`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `lowongan_magang` ADD CONSTRAINT `lowongan_magang_id_batch_foreign` FOREIGN KEY (`id_batch`) REFERENCES `batch`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `lamaran_magang` ADD CONSTRAINT `lamaran_magang_batch_foreign` FOREIGN KEY (`batch`) REFERENCES `batch`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `lamaran_magang` ADD CONSTRAINT `lamaran_magang_id_mahasiswa_foreign` FOREIGN KEY (`id_mahasiswa`) REFERENCES `mahasiswa`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- You are about to drop the column `batch` on the `lowongan_magang` table. All the data in the column will be lost.
|
||||
- Added the required column `id_batch` to the `lowongan_magang` table without a default value. This is not possible if the table is not empty.
|
||||
|
||||
*/
|
||||
-- AlterTable
|
||||
ALTER TABLE `lowongan_magang` DROP COLUMN `batch`,
|
||||
ADD COLUMN `id_batch` INTEGER NOT NULL;
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `lowongan_magang_id_batch_foreign` ON `lowongan_magang`(`id_batch`);
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `lowongan_magang` ADD CONSTRAINT `lowongan_magang_id_batch_foreign` FOREIGN KEY (`id_batch`) REFERENCES `batch`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
-- CreateIndex
|
||||
CREATE INDEX `lamaran_magang_batch_idx` ON `lamaran_magang`(`batch`);
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `lamaran_magang` ADD CONSTRAINT `lamaran_magang_batch_foreign` FOREIGN KEY (`batch`) REFERENCES `batch`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -1,69 +0,0 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE `riwayat_pelamar` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`batch` INTEGER NOT NULL,
|
||||
`negara` VARCHAR(255) NULL,
|
||||
`posisi` VARCHAR(255) NULL,
|
||||
`tahun` INTEGER NOT NULL,
|
||||
`jumlah` INTEGER NOT NULL,
|
||||
`pelamar_diterima` INTEGER NOT NULL,
|
||||
`pelamar_ditolak` INTEGER NOT NULL,
|
||||
`pelamar_diproses` INTEGER NOT NULL,
|
||||
`presentase_diterima` DOUBLE NOT NULL,
|
||||
`presentase_ditolak` DOUBLE NOT NULL,
|
||||
`presentase_diproses` DOUBLE NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
INDEX `riwayat_pelamar_batch_idx`(`batch`),
|
||||
INDEX `riwayat_pelamar_negara_idx`(`negara`),
|
||||
INDEX `riwayat_pelamar_posisi_idx`(`posisi`),
|
||||
UNIQUE INDEX `riwayat_pelamar_batch_negara_posisi_key`(`batch`, `negara`, `posisi`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `feedback` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`nama` VARCHAR(255) NOT NULL,
|
||||
`universitas` VARCHAR(255) NOT NULL,
|
||||
`pesan` TEXT NOT NULL,
|
||||
`batch` INTEGER NOT NULL,
|
||||
`posisi` VARCHAR(255) NOT NULL,
|
||||
`tahun` INTEGER NOT NULL,
|
||||
`image_path` TEXT NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `hasil_research` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`image_path` TEXT NOT NULL,
|
||||
`nama_project` VARCHAR(255) NOT NULL,
|
||||
`deskripsi` VARCHAR(255) NOT NULL,
|
||||
`link_project` TEXT NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `partnership` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`nama_partner` VARCHAR(255) NOT NULL,
|
||||
`image_path` TEXT NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `faq` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`pertanyaan` TEXT NOT NULL,
|
||||
`jawaban` TEXT NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
Regular → Executable
Executable
+9
@@ -0,0 +1,9 @@
|
||||
import { defineConfig } from '@prisma/client';
|
||||
|
||||
export default defineConfig({
|
||||
datasources: {
|
||||
db: {
|
||||
url: process.env.DATABASE_URL,
|
||||
},
|
||||
},
|
||||
});
|
||||
Regular → Executable
+148
-155
@@ -1,6 +1,11 @@
|
||||
//docs: https://www.prisma.io/docs/orm/v6/prisma-schema/overview
|
||||
// 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"
|
||||
provider = "prisma-client-js"
|
||||
output = "../src/generated/prisma"
|
||||
}
|
||||
|
||||
@@ -9,147 +14,125 @@ datasource db {
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
enum Role {
|
||||
ADMIN
|
||||
STUDENT
|
||||
}
|
||||
|
||||
enum StatusLamaran {
|
||||
DITERIMA
|
||||
DIPROSES
|
||||
DITOLAK
|
||||
}
|
||||
|
||||
enum PaidStatus {
|
||||
PAID
|
||||
UNPAID
|
||||
}
|
||||
|
||||
enum StatusLowongan {
|
||||
DIBUKA
|
||||
DITUTUP
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
email String @unique @db.VarChar(255)
|
||||
passwordHash String @map("password_hash") @db.Text
|
||||
role Role
|
||||
// ...
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
updatedAt DateTime @updatedAt @map("updated_at")
|
||||
|
||||
admin Admin?
|
||||
mahasiswa Mahasiswa?
|
||||
|
||||
@@map("user")
|
||||
}
|
||||
|
||||
model Admin {
|
||||
id Int @id @default(autoincrement())
|
||||
idUser String @unique @map("id_user")
|
||||
namaDepan String @map("nama_depan") @db.VarChar(255)
|
||||
namaBelakang String? @map("nama_belakang") @db.VarChar(255)
|
||||
|
||||
user User @relation(fields: [idUser], references: [id], map: "admin_id_user_foreign")
|
||||
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)
|
||||
|
||||
@@map("admin")
|
||||
}
|
||||
|
||||
model Mahasiswa {
|
||||
id Int @id @default(autoincrement())
|
||||
idUser String @unique @map("id_user")
|
||||
namaDepan String @map("nama_depan") @db.VarChar(255)
|
||||
namaBelakang String? @map("nama_belakang") @db.VarChar(255)
|
||||
kontak String @db.VarChar(255)
|
||||
jurusan String @db.VarChar(255)
|
||||
universitas String @db.VarChar(255)
|
||||
negara String @db.VarChar(255)
|
||||
cvPath String @map("cv_path") @db.Text
|
||||
portofolioPath String @map("portofolio_path") @db.Text
|
||||
motivasi String @db.Text
|
||||
relevantSkills String @map("relevant_skills") @db.VarChar(255)
|
||||
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())
|
||||
|
||||
user User @relation(fields: [idUser], references: [id], map: "mahasiswa_id_user_foreign")
|
||||
|
||||
lamaranMagangs LamaranMagang[]
|
||||
|
||||
@@map("mahasiswa")
|
||||
}
|
||||
|
||||
model Batch {
|
||||
id Int @id @default(autoincrement())
|
||||
batchNumber Int @unique @map("batch_number")
|
||||
isActive Boolean @default(false) @map("is_active")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
updatedAt DateTime @updatedAt @map("updated_at")
|
||||
|
||||
lowonganMagangs LowonganMagang[]
|
||||
lamaranMagangs LamaranMagang[]
|
||||
|
||||
@@index([isActive])
|
||||
@@index([batchNumber])
|
||||
@@map("batch")
|
||||
}
|
||||
|
||||
model LowonganMagang {
|
||||
id String @id @db.VarChar(255)
|
||||
idBatch Int @map("id_batch")
|
||||
posisi String @db.VarChar(255)
|
||||
kelompokPeminatan String @map("kelompok_peminatan") @db.VarChar(255)
|
||||
imagePath String @map("image_path") @db.Text
|
||||
jobdesk String @db.Text
|
||||
lokasi String @db.VarChar(255)
|
||||
kualifikasi String @db.Text
|
||||
benefit String @db.Text
|
||||
durasiAwal DateTime @map("durasi_awal") @db.Date
|
||||
durasiAkhir DateTime @map("durasi_akhir") @db.Date
|
||||
statusLowongan StatusLowongan @map("status_lowongan")
|
||||
paid PaidStatus
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
|
||||
batch Batch @relation(fields: [idBatch], references: [id], map: "lowongan_magang_id_batch_foreign")
|
||||
|
||||
lamaranMagangs LamaranMagang[]
|
||||
|
||||
@@index([idBatch], map: "lowongan_magang_id_batch_foreign")
|
||||
@@map("lowongan_magang")
|
||||
@@map("hasil_research")
|
||||
}
|
||||
|
||||
model LamaranMagang {
|
||||
id Int @id @default(autoincrement())
|
||||
idMahasiswa Int @map("id_mahasiswa")
|
||||
idLowonganMagang String @map("id_lowongan_magang") @db.VarChar(255)
|
||||
status StatusLamaran
|
||||
batch Int?
|
||||
id Int @id @default(autoincrement())
|
||||
id_mahasiswa Int
|
||||
id_lowongan_magang String @db.VarChar(255)
|
||||
status StatusLamaran
|
||||
batch Int?
|
||||
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
updatedAt DateTime @updatedAt @map("updated_at")
|
||||
created_at DateTime @default(now())
|
||||
update_at DateTime
|
||||
|
||||
batchData Batch? @relation(fields: [batch], references: [id], map: "lamaran_magang_batch_foreign")
|
||||
mahasiswa Mahasiswa @relation(fields: [idMahasiswa], references: [id], map: "lamaran_magang_id_mahasiswa_foreign")
|
||||
lowonganMagang LowonganMagang @relation(fields: [idLowonganMagang], references: [id], map: "lamaran_magang_id_lowongan_magang_foreign")
|
||||
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([idMahasiswa], map: "lamaran_magang_id_mahasiswa_foreign")
|
||||
@@index([idLowonganMagang], 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)
|
||||
|
||||
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
|
||||
pelamarDiterima Int @map("pelamar_diterima")
|
||||
pelamarDitolak Int @map("pelamar_ditolak")
|
||||
pelamarDiproses Int @map("pelamar_diproses")
|
||||
presentaseDiterima Float @map("presentase_diterima")
|
||||
presentaseDitolak Float @map("presentase_ditolak")
|
||||
presentaseDiproses Float @map("presentase_diproses")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
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])
|
||||
@@ -159,44 +142,54 @@ model RiwayatPelamar {
|
||||
}
|
||||
|
||||
model Feedback {
|
||||
id Int @id @default(autoincrement())
|
||||
nama String @db.VarChar(255)
|
||||
universitas String @db.VarChar(255)
|
||||
pesan String @db.Text
|
||||
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)
|
||||
posisi String @db.VarChar(255)
|
||||
tahun Int
|
||||
imagePath String @map("image_path") @db.Text
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
image_path String @db.Text
|
||||
|
||||
created_at DateTime @default(now())
|
||||
|
||||
@@map("feedback")
|
||||
}
|
||||
|
||||
model HasilResearch {
|
||||
id Int @id @default(autoincrement())
|
||||
imagePath String @map("image_path") @db.Text
|
||||
namaProject String @map("nama_project") @db.VarChar(255)
|
||||
deskripsi String @db.VarChar(255)
|
||||
linkProject String @map("link_project") @db.Text
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
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[]
|
||||
|
||||
@@map("hasil_research")
|
||||
@@index([is_active])
|
||||
@@index([batch_number])
|
||||
@@map("batch")
|
||||
}
|
||||
|
||||
model Partnership {
|
||||
id Int @id @default(autoincrement())
|
||||
namaPartner String @map("nama_partner") @db.VarChar(255)
|
||||
imagePath String @map("image_path") @db.Text
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
|
||||
@@map("partnership")
|
||||
enum Role {
|
||||
admin
|
||||
}
|
||||
|
||||
model Faq {
|
||||
id Int @id @default(autoincrement())
|
||||
pertanyaan String @db.Text
|
||||
jawaban String @db.Text
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
|
||||
@@map("faq")
|
||||
enum StudentRole {
|
||||
student
|
||||
}
|
||||
|
||||
enum StatusLamaran {
|
||||
diterima
|
||||
diproses
|
||||
ditolak
|
||||
}
|
||||
|
||||
enum StatusLowongan {
|
||||
dibuka
|
||||
ditutup
|
||||
}
|
||||
|
||||
enum PaidStatus {
|
||||
paid
|
||||
unpaid
|
||||
}
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
import 'dotenv/config';
|
||||
import { PrismaClient } from '../src/generated/prisma/client';
|
||||
import bcrypt from 'bcryptjs';
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
console.log('Start seeding Internify database...');
|
||||
|
||||
const adminEmail = 'admin@internify.com';
|
||||
const adminPassword = 'AdminInternify123!';
|
||||
const passwordHash = await bcrypt.hash(adminPassword, 10);
|
||||
|
||||
// Cek Apakah ada si Admin
|
||||
const existingAdmin = await prisma.user.findUnique({
|
||||
where: { email: adminEmail }
|
||||
});
|
||||
|
||||
if (!existingAdmin) {
|
||||
const adminUser = await prisma.user.create({
|
||||
data: {
|
||||
email: adminEmail,
|
||||
passwordHash: passwordHash,
|
||||
role: 'ADMIN',
|
||||
admin: {
|
||||
create: {
|
||||
namaDepan: 'Super',
|
||||
namaBelakang: 'Admin',
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
console.log(`Admin user created: ${adminEmail} (password: ${adminPassword})`);
|
||||
} else {
|
||||
console.log(`Admin user already exists: ${adminEmail}`);
|
||||
}
|
||||
|
||||
console.log('Seeding finished');
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((error) => {
|
||||
console.error('Seeding failed:', error);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
@@ -1,249 +0,0 @@
|
||||
import 'dotenv/config';
|
||||
import { PrismaClient } from '../src/generated/prisma/client';
|
||||
import bcrypt from 'bcryptjs';
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
console.log('=== STARTING DEVELOPER DUMMY SEEDING ===');
|
||||
|
||||
const adminEmail = 'admin@internify.com';
|
||||
const adminPassword = 'AdminInternify123!';
|
||||
const passwordHash = await bcrypt.hash(adminPassword, 10);
|
||||
|
||||
let adminUser = await prisma.user.findUnique({ where: { email: adminEmail } });
|
||||
if (!adminUser) {
|
||||
adminUser = await prisma.user.create({
|
||||
data: {
|
||||
email: adminEmail,
|
||||
passwordHash,
|
||||
role: 'ADMIN',
|
||||
admin: {
|
||||
create: {
|
||||
namaDepan: 'Super',
|
||||
namaBelakang: 'Admin'
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
console.log(' Admin created:', adminEmail);
|
||||
} else {
|
||||
console.log(' Admin already exists:', adminEmail);
|
||||
}
|
||||
|
||||
console.log(' Seeding Batches...');
|
||||
const batchesData = [
|
||||
{ batchNumber: 1, isActive: false },
|
||||
{ batchNumber: 2, isActive: false },
|
||||
{ batchNumber: 3, isActive: true } // Active Batch
|
||||
];
|
||||
|
||||
const batches: any[] = [];
|
||||
for (const b of batchesData) {
|
||||
let dbBatch = await prisma.batch.findUnique({ where: { batchNumber: b.batchNumber } });
|
||||
if (!dbBatch) {
|
||||
dbBatch = await prisma.batch.create({ data: b });
|
||||
}
|
||||
batches.push(dbBatch);
|
||||
}
|
||||
console.log(` Seeding Batches complete! Created/Found ${batches.length} batches.`);
|
||||
|
||||
const activeBatch = batches.find(b => b.isActive) || batches[2];
|
||||
|
||||
console.log(' Seeding Student Users...');
|
||||
const studentsData = [
|
||||
{
|
||||
email: 'alice@example.com',
|
||||
namaDepan: 'Alice',
|
||||
namaBelakang: 'Smith',
|
||||
kontak: '08111222333',
|
||||
jurusan: 'Informatika',
|
||||
universitas: 'Institut Teknologi Bandung',
|
||||
negara: 'Indonesia',
|
||||
cvPath: '/uploads/docs/alice-cv.pdf',
|
||||
portofolioPath: '/uploads/docs/alice-portfolio.pdf',
|
||||
motivasi: 'Saya sangat tertarik dengan UI/UX design dan ingin mempraktekkannya.',
|
||||
relevantSkills: 'Figma, Adobe XD, User Research'
|
||||
},
|
||||
{
|
||||
email: 'bob@example.com',
|
||||
namaDepan: 'Bob',
|
||||
namaBelakang: 'Johnson',
|
||||
kontak: '08222333444',
|
||||
jurusan: 'Sistem Informasi',
|
||||
universitas: 'Universitas Indonesia',
|
||||
negara: 'Indonesia',
|
||||
cvPath: '/uploads/docs/bob-cv.pdf',
|
||||
portofolioPath: '/uploads/docs/bob-portfolio.pdf',
|
||||
motivasi: 'Ingin mengembangkan keahlian React dan Tailwind CSS.',
|
||||
relevantSkills: 'React, HTML, CSS, JavaScript'
|
||||
},
|
||||
{
|
||||
email: 'charlie@example.com',
|
||||
namaDepan: 'Charlie',
|
||||
namaBelakang: 'Brown',
|
||||
kontak: '08333444555',
|
||||
jurusan: 'Teknik Komputer',
|
||||
universitas: 'Telkom University',
|
||||
negara: 'Indonesia',
|
||||
cvPath: '/uploads/docs/charlie-cv.pdf',
|
||||
portofolioPath: '/uploads/docs/charlie-portfolio.pdf',
|
||||
motivasi: 'Suka membangun server scalable dan merancang arsitektur API.',
|
||||
relevantSkills: 'Node.js, Express, MySQL, TypeScript'
|
||||
}
|
||||
];
|
||||
|
||||
const mahasiswaList: any[] = [];
|
||||
for (const s of studentsData) {
|
||||
let user = await prisma.user.findUnique({
|
||||
where: { email: s.email },
|
||||
include: { mahasiswa: true }
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
const hash = await bcrypt.hash('Student123!', 10);
|
||||
user = await prisma.user.create({
|
||||
data: {
|
||||
email: s.email,
|
||||
passwordHash: hash,
|
||||
role: 'STUDENT',
|
||||
mahasiswa: {
|
||||
create: {
|
||||
namaDepan: s.namaDepan,
|
||||
namaBelakang: s.namaBelakang,
|
||||
kontak: s.kontak,
|
||||
jurusan: s.jurusan,
|
||||
universitas: s.universitas,
|
||||
negara: s.negara,
|
||||
cvPath: s.cvPath,
|
||||
portofolioPath: s.portofolioPath,
|
||||
motivasi: s.motivasi,
|
||||
relevantSkills: s.relevantSkills
|
||||
}
|
||||
}
|
||||
},
|
||||
include: { mahasiswa: true }
|
||||
});
|
||||
}
|
||||
mahasiswaList.push(user.mahasiswa);
|
||||
}
|
||||
console.log(` Student seeding complete! Created/Found ${mahasiswaList.length} students.`);
|
||||
|
||||
console.log(' Seeding Lowongan Listings...');
|
||||
const lowongansData = [
|
||||
{
|
||||
id: 'lowongan-ui-ux',
|
||||
posisi: 'UI/UX Designer Intern',
|
||||
kelompokPeminatan: 'Design & Creative',
|
||||
imagePath: '/uploads/images/ui-ux-design.png',
|
||||
jobdesk: '<p>Mendesain antarmuka aplikasi mobile dan web, melakukan user testing, dan wireframing.</p>',
|
||||
lokasi: 'Onsite - Bandung',
|
||||
kualifikasi: 'Menguasai Figma, memiliki portofolio desain UI/UX, kreatif.',
|
||||
benefit: 'Sertifikat magang resmi, uang transport harian, mentoring 1-on-1.',
|
||||
paid: 'PAID' as any,
|
||||
statusLowongan: 'DIBUKA' as any
|
||||
},
|
||||
{
|
||||
id: 'lowongan-frontend',
|
||||
posisi: 'Frontend Developer Intern',
|
||||
kelompokPeminatan: 'Web Engineering',
|
||||
imagePath: '/uploads/images/frontend-dev.png',
|
||||
jobdesk: '<p>Mengembangkan antarmuka responsif menggunakan React dan Tailwind CSS.</p>',
|
||||
lokasi: 'Remote',
|
||||
kualifikasi: 'Memahami React JS, ES6 JavaScript, HTML, CSS.',
|
||||
benefit: 'Sertifikat magang resmi, jam kerja fleksibel, free access learning course.',
|
||||
paid: 'UNPAID' as any,
|
||||
statusLowongan: 'DIBUKA' as any
|
||||
},
|
||||
{
|
||||
id: 'lowongan-backend',
|
||||
posisi: 'Backend Developer Intern',
|
||||
kelompokPeminatan: 'Web Engineering',
|
||||
imagePath: '/uploads/images/backend-dev.png',
|
||||
jobdesk: '<p>Membangun REST API, mengoptimalkan query database, dan integrasi backend services.</p>',
|
||||
lokasi: 'Hybrid - Jakarta',
|
||||
kualifikasi: 'Memahami Node.js, Express, dan Relational Database seperti MySQL.',
|
||||
benefit: 'Sertifikat magang resmi, konversi SKS, coworking space access.',
|
||||
paid: 'PAID' as any,
|
||||
statusLowongan: 'DIBUKA' as any
|
||||
}
|
||||
];
|
||||
|
||||
const lowonganList: any[] = [];
|
||||
for (const l of lowongansData) {
|
||||
let dbLowongan = await prisma.lowonganMagang.findUnique({ where: { id: l.id } });
|
||||
if (!dbLowongan) {
|
||||
dbLowongan = await prisma.lowonganMagang.create({
|
||||
data: {
|
||||
id: l.id,
|
||||
idBatch: activeBatch.id,
|
||||
posisi: l.posisi,
|
||||
kelompokPeminatan: l.kelompokPeminatan,
|
||||
imagePath: l.imagePath,
|
||||
jobdesk: l.jobdesk,
|
||||
lokasi: l.lokasi,
|
||||
kualifikasi: l.kualifikasi,
|
||||
benefit: l.benefit,
|
||||
durasiAwal: new Date(),
|
||||
durasiAkhir: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000), // 90 days from now
|
||||
statusLowongan: l.statusLowongan,
|
||||
paid: l.paid
|
||||
}
|
||||
});
|
||||
}
|
||||
lowonganList.push(dbLowongan);
|
||||
}
|
||||
console.log(` Lowongan seeding complete! Created/Found ${lowonganList.length} listings.`);
|
||||
|
||||
console.log(' Seeding Lamaran Records...');
|
||||
const lamaranData = [
|
||||
{
|
||||
idMahasiswa: mahasiswaList[0].id,
|
||||
idLowonganMagang: lowonganList[0].id,
|
||||
status: 'DIPROSES' as any
|
||||
},
|
||||
{
|
||||
idMahasiswa: mahasiswaList[1].id,
|
||||
idLowonganMagang: lowonganList[1].id,
|
||||
status: 'DIPROSES' as any
|
||||
},
|
||||
{
|
||||
idMahasiswa: mahasiswaList[2].id,
|
||||
idLowonganMagang: lowonganList[2].id,
|
||||
status: 'DIPROSES' as any
|
||||
}
|
||||
];
|
||||
|
||||
let lamaranCount = 0;
|
||||
for (const lam of lamaranData) {
|
||||
const existing = await prisma.lamaranMagang.findFirst({
|
||||
where: {
|
||||
idMahasiswa: lam.idMahasiswa,
|
||||
idLowonganMagang: lam.idLowonganMagang
|
||||
}
|
||||
});
|
||||
|
||||
if (!existing) {
|
||||
await prisma.lamaranMagang.create({
|
||||
data: {
|
||||
idMahasiswa: lam.idMahasiswa,
|
||||
idLowonganMagang: lam.idLowonganMagang,
|
||||
status: lam.status,
|
||||
batch: activeBatch.id
|
||||
}
|
||||
});
|
||||
lamaranCount++;
|
||||
}
|
||||
}
|
||||
console.log(` Lamaran seeding complete! Created ${lamaranCount} new applications.`);
|
||||
|
||||
console.log('\n=== DEVELOPER SEEDING COMPLETED SUCCESSFULLY ===');
|
||||
}
|
||||
|
||||
main()
|
||||
.catch(e => {
|
||||
console.error('Seeding failed:', e);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
Reference in New Issue
Block a user