Merge pull request #1 from internship-humic/feature/inisialisasi-schema
feat: inisialisasi schema database
This commit is contained in:
@@ -1,3 +1,6 @@
|
|||||||
# Server Configuration
|
# Server Configuration
|
||||||
PORT=5000
|
PORT=5000
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
|
|
||||||
|
# Database
|
||||||
|
DATABASE_URL="mysql://db_username:db_pass@db_host:3306/internify_lms_db"
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ lerna-debug.log*
|
|||||||
# Editor & IDE settings
|
# Editor & IDE settings
|
||||||
.vscode/
|
.vscode/
|
||||||
.idea/
|
.idea/
|
||||||
|
.zed/
|
||||||
*.suo
|
*.suo
|
||||||
*.ntvs*
|
*.ntvs*
|
||||||
*.njsproj
|
*.njsproj
|
||||||
@@ -31,3 +32,6 @@ lerna-debug.log*
|
|||||||
# OS metadata
|
# OS metadata
|
||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
|
||||||
|
# Prisma
|
||||||
|
/src/generated/prisma
|
||||||
|
|||||||
Generated
+943
-29
File diff suppressed because it is too large
Load Diff
+9
-1
@@ -6,12 +6,18 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "rimraf dist && tsc",
|
"build": "rimraf dist && tsc",
|
||||||
"start": "node dist/index.js",
|
"start": "node dist/index.js",
|
||||||
"dev": "ts-node-dev --respawn --transpile-only src/index.ts"
|
"dev": "ts-node-dev --respawn --transpile-only src/index.ts",
|
||||||
|
"db:generate": "prisma generate",
|
||||||
|
"db:studio": "prisma studio",
|
||||||
|
"db:migrate": "prisma migrate dev",
|
||||||
|
"db:seed": "prisma db seed",
|
||||||
|
"db:reset": "prisma migrate reset"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@prisma/client": "^6.19.3",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"express": "^4.19.2",
|
"express": "^4.19.2",
|
||||||
@@ -23,8 +29,10 @@
|
|||||||
"@types/express": "^4.17.21",
|
"@types/express": "^4.17.21",
|
||||||
"@types/morgan": "^1.9.9",
|
"@types/morgan": "^1.9.9",
|
||||||
"@types/node": "^20.12.12",
|
"@types/node": "^20.12.12",
|
||||||
|
"prisma": "^6.19.3",
|
||||||
"rimraf": "^5.0.7",
|
"rimraf": "^5.0.7",
|
||||||
"ts-node-dev": "^2.0.0",
|
"ts-node-dev": "^2.0.0",
|
||||||
|
"tsx": "^4.22.3",
|
||||||
"typescript": "^5.4.5"
|
"typescript": "^5.4.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
// This file was generated by Prisma and assumes you have installed the following:
|
||||||
|
// npm install --save-dev prisma dotenv
|
||||||
|
import 'dotenv/config';
|
||||||
|
import { defineConfig, env } from 'prisma/config';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
schema: 'prisma/schema.prisma',
|
||||||
|
migrations: {
|
||||||
|
path: 'prisma/migrations',
|
||||||
|
seed: 'tsx prisma/seed.ts',
|
||||||
|
},
|
||||||
|
engine: 'classic',
|
||||||
|
datasource: {
|
||||||
|
url: env('DATABASE_URL'),
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE `user` (
|
||||||
|
`id` VARCHAR(191) NOT NULL,
|
||||||
|
`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,
|
||||||
|
|
||||||
|
UNIQUE INDEX `user_email_key`(`email`),
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE `admin` (
|
||||||
|
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||||
|
`id_user` VARCHAR(191) NOT NULL,
|
||||||
|
`nama_depan` VARCHAR(255) NOT NULL,
|
||||||
|
`nama_belakang` VARCHAR(255) NULL,
|
||||||
|
|
||||||
|
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,
|
||||||
|
`kontak` VARCHAR(255) NOT NULL,
|
||||||
|
`jurusan` VARCHAR(255) NOT NULL,
|
||||||
|
`universitas` VARCHAR(255) NOT NULL,
|
||||||
|
`negara` VARCHAR(255) NOT NULL,
|
||||||
|
`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`),
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE `batch` (
|
||||||
|
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||||
|
`batch_number` INTEGER NOT NULL,
|
||||||
|
`is_active` BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||||
|
`updated_at` DATETIME(3) NOT NULL,
|
||||||
|
|
||||||
|
UNIQUE INDEX `batch_batch_number_key`(`batch_number`),
|
||||||
|
INDEX `batch_is_active_idx`(`is_active`),
|
||||||
|
INDEX `batch_batch_number_idx`(`batch_number`),
|
||||||
|
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;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE `lamaran_magang` ADD CONSTRAINT `lamaran_magang_id_lowongan_magang_foreign` FOREIGN KEY (`id_lowongan_magang`) REFERENCES `lowongan_magang`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Please do not edit this file manually
|
||||||
|
# It should be added in your version-control system (e.g., Git)
|
||||||
|
provider = "mysql"
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
//docs: https://www.prisma.io/docs/orm/v6/prisma-schema/overview
|
||||||
|
generator client {
|
||||||
|
provider = "prisma-client"
|
||||||
|
output = "../src/generated/prisma"
|
||||||
|
}
|
||||||
|
|
||||||
|
datasource db {
|
||||||
|
provider = "mysql"
|
||||||
|
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")
|
||||||
|
|
||||||
|
@@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)
|
||||||
|
|
||||||
|
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")
|
||||||
|
}
|
||||||
|
|
||||||
|
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?
|
||||||
|
|
||||||
|
createdAt DateTime @default(now()) @map("created_at")
|
||||||
|
updatedAt DateTime @updatedAt @map("updated_at")
|
||||||
|
|
||||||
|
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")
|
||||||
|
|
||||||
|
@@index([idMahasiswa], map: "lamaran_magang_id_mahasiswa_foreign")
|
||||||
|
@@index([idLowonganMagang], map: "lamaran_magang_id_lowongan_magang_foreign")
|
||||||
|
@@index([batch])
|
||||||
|
@@map("lamaran_magang")
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import 'dotenv/config';
|
||||||
|
import { PrismaClient } from '../src/generated/prisma/client';
|
||||||
|
|
||||||
|
const prisma = new PrismaClient();
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
console.log('Start seeding Internify database...');
|
||||||
|
|
||||||
|
// Seeding process ...
|
||||||
|
|
||||||
|
console.log('Seeding finished');
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
|
.catch((error) => {
|
||||||
|
console.error('Seeding failed:', error);
|
||||||
|
process.exit(1);
|
||||||
|
})
|
||||||
|
.finally(async () => {
|
||||||
|
await prisma.$disconnect();
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user