Backend REST API untuk sistem manajemen data karyawan. Aplikasi dibangun dengan Go, Gin, GORM, dan PostgreSQL.
- Registrasi, login, refresh token, logout, dan reset password
- Profil karyawan dan perhitungan kelengkapan profil
- Dashboard user dan admin
- CRUD karyawan untuk admin
- Upload dokumen ke local storage
- JWT authentication, role-based authorization, CORS, secure headers, dan rate limiting
- Migrasi serta seed SQL otomatis saat aplikasi mulai
- Dokumentasi API melalui Swagger
- Go 1.25+
- Gin
- GORM dengan PostgreSQL
- JWT (
github.com/golang-jwt/jwt/v5) - Docker dan Docker Compose
cmd/api/ Entry point aplikasi
config/ Pembacaan environment variable
internal/
domain/ Model domain
handler/ HTTP handler
middleware/ Authentication dan middleware HTTP
repository/ Akses database
routes/ Registrasi route
service/ Business logic
validator/ Validasi request
migrations/ SQL schema migration
seeds/ Data awal
pkg/ Package reusable (database, JWT, storage, response)
tests/ Automated tests
Prasyarat:
- Go 1.25 atau lebih baru
- PostgreSQL yang dapat diakses aplikasi
cp .env.example .envUntuk menjalankan binary dari host, ubah DB_HOST di .env menjadi localhost dan sesuaikan kredensial PostgreSQL. Setelah database tersedia:
go run ./cmd/apiAplikasi berjalan di http://localhost:8080 secara default.
Pada startup, aplikasi menjalankan file .sql dalam migrations/ dan seeds/ secara berurutan. Seed dapat dinonaktifkan dengan:
SEED_ON_BOOT=falseSalin .env.example sebagai titik awal. Variable utama yang digunakan aplikasi:
| Variable | Default | Keterangan |
|---|---|---|
APP_ENV |
development |
Environment aplikasi |
APP_NAME |
E-Form Employee Management System |
Nama service |
APP_PORT |
8080 |
Port HTTP |
CORS_ALLOWED_ORIGINS |
- | Daftar origin CORS dipisahkan koma |
UPLOAD_PATH |
./uploads |
Direktori upload dokumen |
MAX_UPLOAD_BYTES |
1048576 |
Batas ukuran upload dalam byte |
RATE_LIMIT_RPS |
10 |
Request per detik |
RATE_LIMIT_BURST |
20 |
Burst rate limit |
SEED_ON_BOOT |
true |
Jalankan seed saat startup |
POSTGRES_USER |
postgres |
User database aplikasi dan PostgreSQL |
POSTGRES_PASSWORD |
postgres |
Password database aplikasi dan PostgreSQL |
POSTGRES_DB |
eform |
Nama database aplikasi dan PostgreSQL |
DB_HOST |
db |
Host PostgreSQL |
DB_PORT |
5432 |
Port PostgreSQL |
DB_SSLMODE |
disable |
SSL mode PostgreSQL |
DB_TIMEZONE |
UTC |
Time zone koneksi database |
JWT_SECRET |
change-this-secret |
Secret signing JWT; wajib diganti di deployment |
ACCESS_TOKEN_TTL |
15m |
Masa berlaku access token |
REFRESH_TOKEN_TTL |
168h |
Masa berlaku refresh token |
Jangan commit .env yang berisi secret.
Health check:
GET /health
Swagger UI tersedia di:
GET /swagger/index.html
Base path API adalah /api/v1.
| Kelompok | Endpoint |
|---|---|
| Auth publik | POST /auth/register, /auth/login, /auth/refresh, /auth/logout, /auth/forgot-password, /auth/reset-password |
| Profil | GET /profile/me, PUT /profile/me, POST /auth/change-password |
| Dashboard | GET /dashboard/user, GET /dashboard/admin (admin) |
| Karyawan | GET/POST /employees, GET/PUT/DELETE /employees/:id (admin) |
| Status karyawan | PATCH /employees/:id/activate, PATCH /employees/:id/deactivate (admin) |
| Reset password admin | POST /employees/:id/reset-password (admin) |
Endpoint protected membutuhkan header:
Authorization: Bearer <access-token>go test ./...
go build ./cmd/apiCI menjalankan kedua command tersebut sebelum image Docker dibuat.
Build image:
docker build -t eform-api .Image menjalankan binary /app/eform-api, mengekspos port 8080, dan membawa direktori migrations/ serta seeds/.
compose.yaml ditujukan untuk deployment image dari GHCR, bukan development lokal. Variable deployment yang diperlukan antara lain GHCR_OWNER, IMAGE_TAG, dan PLATFORM_DOMAIN. Aplikasi membaca POSTGRES_PASSWORD dan POSTGRES_DB agar kredensialnya sama dengan service PostgreSQL Compose.
Compose memakai external network edge serta bind mount production di /srv/apps/eform-api/volumes/; pastikan keduanya tersedia sebelum menjalankannya.
Workflow .github/workflows/deploy.yml berjalan ketika ada push ke branch main atau dijalankan manual untuk redeploy SHA tertentu. Alurnya:
- Menjalankan test dan build Go.
- Build dan push image ke GHCR dengan tag commit SHA.
- Mengubah
IMAGE_TAGdi server production. - Menjalankan
docker compose pulldandocker compose up -dmelalui SSH.