TKK_E32222530/prisma/migrations/20250617234042_init/migration.sql

330 lines
10 KiB
SQL

-- CreateEnum
CREATE TYPE "Role" AS ENUM ('ADMIN', 'DOSEN', 'MAHASISWA');
-- CreateEnum
CREATE TYPE "SemesterType" AS ENUM ('GANJIL', 'GENAP');
-- CreateEnum
CREATE TYPE "RuanganType" AS ENUM ('TEORI', 'PRAKTIKUM');
-- CreateEnum
CREATE TYPE "Hari" AS ENUM ('SENIN', 'SELASA', 'RABU', 'KAMIS', 'JUMAT', 'SABTU', 'MINGGU');
-- CreateEnum
CREATE TYPE "StatusPresensi" AS ENUM ('HADIR', 'TIDAK_HADIR', 'IZIN', 'SAKIT');
-- CreateEnum
CREATE TYPE "TipePengajuan" AS ENUM ('IZIN', 'SAKIT');
-- CreateEnum
CREATE TYPE "StatusPengajuan" AS ENUM ('DIPROSES', 'DISETUJUI', 'DITOLAK');
-- CreateTable
CREATE TABLE "accounts" (
"id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"type" TEXT NOT NULL,
"provider" TEXT NOT NULL,
"provider_account_id" TEXT NOT NULL,
"refresh_token" TEXT,
"access_token" TEXT,
"expires_at" INTEGER,
"token_type" TEXT,
"scope" TEXT,
"id_token" TEXT,
"session_state" TEXT,
CONSTRAINT "accounts_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "sessions" (
"id" TEXT NOT NULL,
"session_token" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"expires" TIMESTAMP(3) NOT NULL,
CONSTRAINT "sessions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "user" (
"id" TEXT NOT NULL,
"uid" TEXT,
"name" TEXT NOT NULL,
"email" TEXT NOT NULL,
"password" TEXT,
"alamat" TEXT,
"no_hp" TEXT,
"foto" TEXT,
"nim" TEXT,
"nip" TEXT,
"is_profile_complete" BOOLEAN NOT NULL DEFAULT false,
"role" "Role" NOT NULL DEFAULT 'MAHASISWA',
"gender" TEXT,
"prodiId" TEXT,
"golonganId" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "user_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "verification_tokens" (
"identifier" TEXT NOT NULL,
"token" TEXT NOT NULL,
"expires" TIMESTAMP(3) NOT NULL
);
-- CreateTable
CREATE TABLE "Semester" (
"id" SERIAL NOT NULL,
"name" TEXT NOT NULL,
"tipe" "SemesterType" NOT NULL,
CONSTRAINT "Semester_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Ruangan" (
"id" TEXT NOT NULL,
"kode" TEXT NOT NULL,
"name" TEXT NOT NULL,
"type" "RuanganType" NOT NULL,
CONSTRAINT "Ruangan_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ProgramStudi" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"slug" TEXT NOT NULL,
CONSTRAINT "ProgramStudi_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "PresensiKuliah" (
"id" TEXT NOT NULL,
"waktu_presensi" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"status" "StatusPresensi" NOT NULL,
"keterangan" TEXT,
"mahasiswaId" TEXT NOT NULL,
"matkulId" TEXT NOT NULL,
"jadwalKuliahId" TEXT NOT NULL,
CONSTRAINT "PresensiKuliah_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "PengajuanIzin" (
"id" TEXT NOT NULL,
"tanggal_izin" TIMESTAMP(3) NOT NULL,
"tipe_pengajuan" "TipePengajuan" NOT NULL,
"pesan" TEXT NOT NULL,
"file_bukti" TEXT,
"status" "StatusPengajuan" NOT NULL DEFAULT 'DIPROSES',
"catatan_dosen" TEXT,
"mahasiswaId" TEXT NOT NULL,
"jadwalKuliahId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "PengajuanIzin_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Notifikasi" (
"id" TEXT NOT NULL,
"tipe" TEXT NOT NULL,
"konten" TEXT NOT NULL,
"url_tujuan" TEXT,
"read_at" TIMESTAMP(3),
"userId" TEXT NOT NULL,
"senderId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Notifikasi_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "MataKuliah" (
"id" TEXT NOT NULL,
"kode" TEXT NOT NULL,
"name" TEXT NOT NULL,
CONSTRAINT "MataKuliah_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "LaporanMahasiswa" (
"id" TEXT NOT NULL,
"tipe" TEXT NOT NULL,
"pesan" TEXT NOT NULL,
"status" TEXT NOT NULL DEFAULT 'Belum Ditangani',
"balasan" TEXT,
"userId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "LaporanMahasiswa_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "JadwalKuliah" (
"id" TEXT NOT NULL,
"is_kelas_besar" BOOLEAN NOT NULL DEFAULT false,
"hari" "Hari" NOT NULL,
"jam_mulai" TIMESTAMP(3) NOT NULL,
"jam_selesai" TIMESTAMP(3) NOT NULL,
"dosenId" TEXT NOT NULL,
"matkulId" TEXT NOT NULL,
"semesterId" INTEGER NOT NULL,
"prodiId" TEXT NOT NULL,
"golonganId" TEXT NOT NULL,
"ruanganId" TEXT NOT NULL,
CONSTRAINT "JadwalKuliah_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Golongan" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"prodiId" TEXT NOT NULL,
CONSTRAINT "Golongan_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "AlatPresensi" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"mode" TEXT NOT NULL,
"jadwal_nyala" TIMESTAMP(3),
"jadwal_mati" TIMESTAMP(3),
"status" TEXT NOT NULL,
"ruanganId" TEXT NOT NULL,
CONSTRAINT "AlatPresensi_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "PesertaKuliah" (
"id" TEXT NOT NULL,
"mahasiswaId" TEXT NOT NULL,
"jadwalKuliahId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "PesertaKuliah_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "accounts_provider_provider_account_id_key" ON "accounts"("provider", "provider_account_id");
-- CreateIndex
CREATE UNIQUE INDEX "sessions_session_token_key" ON "sessions"("session_token");
-- CreateIndex
CREATE UNIQUE INDEX "user_uid_key" ON "user"("uid");
-- CreateIndex
CREATE UNIQUE INDEX "user_email_key" ON "user"("email");
-- CreateIndex
CREATE UNIQUE INDEX "user_nim_key" ON "user"("nim");
-- CreateIndex
CREATE UNIQUE INDEX "user_nip_key" ON "user"("nip");
-- CreateIndex
CREATE UNIQUE INDEX "verification_tokens_identifier_token_key" ON "verification_tokens"("identifier", "token");
-- CreateIndex
CREATE UNIQUE INDEX "Semester_name_key" ON "Semester"("name");
-- CreateIndex
CREATE UNIQUE INDEX "Ruangan_kode_key" ON "Ruangan"("kode");
-- CreateIndex
CREATE UNIQUE INDEX "ProgramStudi_name_key" ON "ProgramStudi"("name");
-- CreateIndex
CREATE UNIQUE INDEX "ProgramStudi_slug_key" ON "ProgramStudi"("slug");
-- CreateIndex
CREATE UNIQUE INDEX "MataKuliah_kode_key" ON "MataKuliah"("kode");
-- CreateIndex
CREATE UNIQUE INDEX "PesertaKuliah_mahasiswaId_jadwalKuliahId_key" ON "PesertaKuliah"("mahasiswaId", "jadwalKuliahId");
-- AddForeignKey
ALTER TABLE "accounts" ADD CONSTRAINT "accounts_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "sessions" ADD CONSTRAINT "sessions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "user" ADD CONSTRAINT "user_prodiId_fkey" FOREIGN KEY ("prodiId") REFERENCES "ProgramStudi"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "user" ADD CONSTRAINT "user_golonganId_fkey" FOREIGN KEY ("golonganId") REFERENCES "Golongan"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "PresensiKuliah" ADD CONSTRAINT "PresensiKuliah_mahasiswaId_fkey" FOREIGN KEY ("mahasiswaId") REFERENCES "user"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "PresensiKuliah" ADD CONSTRAINT "PresensiKuliah_matkulId_fkey" FOREIGN KEY ("matkulId") REFERENCES "MataKuliah"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "PresensiKuliah" ADD CONSTRAINT "PresensiKuliah_jadwalKuliahId_fkey" FOREIGN KEY ("jadwalKuliahId") REFERENCES "JadwalKuliah"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "PengajuanIzin" ADD CONSTRAINT "PengajuanIzin_mahasiswaId_fkey" FOREIGN KEY ("mahasiswaId") REFERENCES "user"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "PengajuanIzin" ADD CONSTRAINT "PengajuanIzin_jadwalKuliahId_fkey" FOREIGN KEY ("jadwalKuliahId") REFERENCES "JadwalKuliah"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Notifikasi" ADD CONSTRAINT "Notifikasi_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Notifikasi" ADD CONSTRAINT "Notifikasi_senderId_fkey" FOREIGN KEY ("senderId") REFERENCES "user"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "LaporanMahasiswa" ADD CONSTRAINT "LaporanMahasiswa_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "JadwalKuliah" ADD CONSTRAINT "JadwalKuliah_dosenId_fkey" FOREIGN KEY ("dosenId") REFERENCES "user"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "JadwalKuliah" ADD CONSTRAINT "JadwalKuliah_matkulId_fkey" FOREIGN KEY ("matkulId") REFERENCES "MataKuliah"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "JadwalKuliah" ADD CONSTRAINT "JadwalKuliah_semesterId_fkey" FOREIGN KEY ("semesterId") REFERENCES "Semester"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "JadwalKuliah" ADD CONSTRAINT "JadwalKuliah_prodiId_fkey" FOREIGN KEY ("prodiId") REFERENCES "ProgramStudi"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "JadwalKuliah" ADD CONSTRAINT "JadwalKuliah_golonganId_fkey" FOREIGN KEY ("golonganId") REFERENCES "Golongan"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "JadwalKuliah" ADD CONSTRAINT "JadwalKuliah_ruanganId_fkey" FOREIGN KEY ("ruanganId") REFERENCES "Ruangan"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Golongan" ADD CONSTRAINT "Golongan_prodiId_fkey" FOREIGN KEY ("prodiId") REFERENCES "ProgramStudi"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "AlatPresensi" ADD CONSTRAINT "AlatPresensi_ruanganId_fkey" FOREIGN KEY ("ruanganId") REFERENCES "Ruangan"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "PesertaKuliah" ADD CONSTRAINT "PesertaKuliah_mahasiswaId_fkey" FOREIGN KEY ("mahasiswaId") REFERENCES "user"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "PesertaKuliah" ADD CONSTRAINT "PesertaKuliah_jadwalKuliahId_fkey" FOREIGN KEY ("jadwalKuliahId") REFERENCES "JadwalKuliah"("id") ON DELETE RESTRICT ON UPDATE CASCADE;