Skip to content

Repository files navigation

E-Form Employee Management API

Backend REST API untuk sistem manajemen data karyawan. Aplikasi dibangun dengan Go, Gin, GORM, dan PostgreSQL.

Fitur

  • 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

Teknologi

  • Go 1.25+
  • Gin
  • GORM dengan PostgreSQL
  • JWT (github.com/golang-jwt/jwt/v5)
  • Docker dan Docker Compose

Struktur Direktori

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

Menjalankan Secara Lokal

Prasyarat:

  • Go 1.25 atau lebih baru
  • PostgreSQL yang dapat diakses aplikasi
cp .env.example .env

Untuk menjalankan binary dari host, ubah DB_HOST di .env menjadi localhost dan sesuaikan kredensial PostgreSQL. Setelah database tersedia:

go run ./cmd/api

Aplikasi 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=false

Environment Variable

Salin .env.example sebagai titik awal. Variable utama yang digunakan aplikasi:

VariableDefaultKeterangan
APP_ENVdevelopmentEnvironment aplikasi
APP_NAMEE-Form Employee Management SystemNama service
APP_PORT8080Port HTTP
CORS_ALLOWED_ORIGINS-Daftar origin CORS dipisahkan koma
UPLOAD_PATH./uploadsDirektori upload dokumen
MAX_UPLOAD_BYTES1048576Batas ukuran upload dalam byte
RATE_LIMIT_RPS10Request per detik
RATE_LIMIT_BURST20Burst rate limit
SEED_ON_BOOTtrueJalankan seed saat startup
POSTGRES_USERpostgresUser database aplikasi dan PostgreSQL
POSTGRES_PASSWORDpostgresPassword database aplikasi dan PostgreSQL
POSTGRES_DBeformNama database aplikasi dan PostgreSQL
DB_HOSTdbHost PostgreSQL
DB_PORT5432Port PostgreSQL
DB_SSLMODEdisableSSL mode PostgreSQL
DB_TIMEZONEUTCTime zone koneksi database
JWT_SECRETchange-this-secretSecret signing JWT; wajib diganti di deployment
ACCESS_TOKEN_TTL15mMasa berlaku access token
REFRESH_TOKEN_TTL168hMasa berlaku refresh token

Jangan commit .env yang berisi secret.

API

Health check:

GET /health

Swagger UI tersedia di:

GET /swagger/index.html

Base path API adalah /api/v1.

KelompokEndpoint
Auth publikPOST /auth/register, /auth/login, /auth/refresh, /auth/logout, /auth/forgot-password, /auth/reset-password
ProfilGET /profile/me, PUT /profile/me, POST /auth/change-password
DashboardGET /dashboard/user, GET /dashboard/admin (admin)
KaryawanGET/POST /employees, GET/PUT/DELETE /employees/:id (admin)
Status karyawanPATCH /employees/:id/activate, PATCH /employees/:id/deactivate (admin)
Reset password adminPOST /employees/:id/reset-password (admin)

Endpoint protected membutuhkan header:

Authorization: Bearer <access-token>

Testing dan Build

go test ./...
go build ./cmd/api

CI menjalankan kedua command tersebut sebelum image Docker dibuat.

Docker

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.

Deployment

Workflow .github/workflows/deploy.yml berjalan ketika ada push ke branch main atau dijalankan manual untuk redeploy SHA tertentu. Alurnya:

  1. Menjalankan test dan build Go.
  2. Build dan push image ke GHCR dengan tag commit SHA.
  3. Mengubah IMAGE_TAG di server production.
  4. Menjalankan docker compose pull dan docker compose up -d melalui SSH.

About

Backend REST API untuk sistem manajemen data karyawan. Aplikasi dibangun dengan Go, Gin, GORM, dan PostgreSQL.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages