Aplikasi *backend* untuk GMF GSE Training, dibangun dengan NestJS dan terhubung ke PostgreSQL.
Repositori ini berisi kode backend untuk aplikasi 'GMF GSE Training', dibangun menggunakan framework NestJS dan terhubung ke database PostgreSQL. Backend ini menyediakan API untuk manajemen pengguna, autentikasi, otorisasi berbasis peran, serta fitur pelatihan dan sertifikasi.
- Autentikasi & Otorisasi: JWT, refresh token, verifikasi email, reset password, dan otorisasi berbasis peran.
- Manajemen Pengguna & Peran: CRUD pengguna dan peran (super admin, supervisor, lcu, user).
- Integrasi Database: Prisma ORM untuk PostgreSQL.
- Sistem Notifikasi: Email untuk verifikasi akun dan reset password.
- Manajemen Dokumen: Upload/download dokumen dan sertifikat.
- Logging: Winston untuk pemantauan aplikasi.
backend/
├── src/
│ ├── auth/ # Modul autentikasi & otorisasi
│ ├── common/ # Modul umum (Prisma, Validation, Logging)
│ ├── capability/ # Manajemen kapabilitas
│ ├── certificate/ # Manajemen sertifikat
│ ├── config/ # Konfigurasi aplikasi
│ ├── cot/ # Calendar Of Training (COT)
│ ├── curriculum-syllabus/# Kurikulum & silabus
│ ├── e-sign/ # Tanda tangan elektronik
│ ├── mail/ # Pengiriman email
│ ├── participant/ # Manajemen peserta
│ ├── participant-cot/ # Peserta COT
│ ├── role/ # Manajemen peran
│ ├── shared/ # Modul & layanan bersama
│ ├── user/ # Manajemen pengguna
│ └── main.ts # Entry point aplikasi
├── prisma/ # Skema & migrasi database
├── public/ # File statis (QR code, sertifikat)
├── uploads/ # File upload
├── .env.example # Contoh konfigurasi lingkungan
├── pnpm-lock.yaml # Lock file dependensi
└── package.json # Definisi proyek & skrip
- Pastikan pnpm sudah terpasang.
- Jalankan:
pnpm installBuat file .env di direktori backend/ berdasarkan .env.example. Jangan gunakan data asli pada file ini. Contoh:
DATABASE_URL="postgresql://<USER>:<PASSWORD>@<HOST>:<PORT>/<DB>?pgbouncer=true"
NODE_ENV=development
PROTOCOL=http
HOST=0.0.0.0
PORT=3000
FRONTEND_URL=https://frontend.example.com
CORS_ORIGIN=http://localhost:4200,https://frontend.example.com
BACKEND_URL=https://api.example.com
ACCESS_TOKEN=<ACCESS_TOKEN>
REFRESH_TOKEN=<REFRESH_TOKEN>
VERIFICATION_TOKEN=<VERIFICATION_TOKEN>
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USER=<MAIL_USER>
MAIL_PASS=<MAIL_PASS>
APP_NAME="Admin GMF GSE Training"
Catatan:
- Jangan pernah commit file
.envyang berisi data asli. - Gunakan variabel dummy pada contoh.
- Untuk deployment production, sesuaikan domain dan kredensial.
pnpm prisma migrate deploy
pnpm run seed# Development
pnpm run start
# Watch mode (hot-reloading)
pnpm run start:dev
# Production mode
pnpm run start:prod# Unit tests
pnpm run test
# E2E tests
pnpm run test:e2e
# Test coverage
pnpm run test:covDeployment otomatis ke Cloud Run via GitHub Actions pada branch backup/dev-2025-06-15.
Pastikan secrets berikut sudah diatur di GitHub:
- GCP_SA_KEY
- DATABASE_URL
- ACCESS_TOKEN
- REFRESH_TOKEN
- VERIFICATION_TOKEN
- MAIL_USER
- MAIL_PASS
- FRONTEND_URL
- BACKEND_URL
- APP_NAME
Penting:
- Nama secret harus sama persis dengan variabel environment aplikasi.
- Jangan pernah menaruh data sensitif di README atau file publik.
Jika error terkait bcrypt, update bcrypt dan pastikan Node.js versi 20.x:
pnpm update bcrypt@latest
pnpm prisma generate
nvm install 20 && nvm use 20
rm -rf node_modules pnpm-lock.yaml && pnpm install
pnpm prisma generate
pnpm run seedMIT License