Tipe Pegawai Enum
Dokumentasi enum dan validasi untuk tipe pegawai.
Overview
Package utils menyediakan enum dan validasi function untuk tipe pegawai.
Enum Values
var enumTipePegawai = map[string]bool{
"pns": true,
"non-pns": true,
"unit-kerja": true,
}
| Value | Deskripsi |
|---|---|
pns | Pegawai Negeri Sipil |
non-pns | Pegawai Non-PNS (PJLP/NPTT) |
unit-kerja | Unit Kerja |
Function
IsValidTipePegawai
Memvalidasi apakah string tipe pegawai valid.
func IsValidTipePegawai(tipePegawai string) bool
Parameters
| Parameter | Type | Deskripsi |
|---|---|---|
tipePegawai | string | Tipe pegawai yang akan divalidasi |
Return
true- Tipe pegawai validfalse- Tipe pegawai tidak valid
Example
// ✅ Valid
utils.IsValidTipePegawai("pns") // true
utils.IsValidTipePegawai("non-pns") // true
utils.IsValidTipePegawai("unit-kerja") // true
// ❌ Invalid
utils.IsValidTipePegawai("PNS") // false - case sensitive
utils.IsValidTipePegawai("pegawai") // false - not in enum
utils.IsValidTipePegawai("") // false - empty
Usage in Controller
func CreatePengguna(c *gin.Context) {
var req dto.PenggunaPostRequest
if err := c.ShouldBindJSON(&req); err != nil {
helpers.SendError(c, helpers.NewBadRequest("Invalid request"))
return
}
// Validate tipe pegawai
if !utils.IsValidTipePegawai(req.TipePegawai) {
helpers.SendError(c, helpers.NewBadRequest(
"Invalid tipe pegawai. Must be one of: pns, non-pns, unit-kerja"))
return
}
// Continue creating pengguna...
}
Database Schema
Kolom tipe_pegawai di database:
CREATE TABLE pengguna (
id UUID PRIMARY KEY,
no_pegawai VARCHAR(50),
tipe_pegawai VARCHAR(20) CHECK (tipe_pegawai IN ('pns', 'non-pns', 'unit-kerja')),
-- ...
);
Related Tables
Setiap tipe pegawai memiliki tabel data yang berbeda:
| Tipe Pegawai | Tabel Data | No Pegawai Field |
|---|---|---|
pns | pns, pnsKepegawaian | nrk |
non-pns | nonPns, nonPnsKepegawaian | nptt_npjlp |
unit-kerja | - | - |
Query Example
// Get pengguna berdasarkan tipe
func GetPenggunaByTipe(tipePegawai string) ([]Result, error) {
if tipePegawai == "pns" {
return db.Model(&models.Pengguna{}).
Joins("LEFT JOIN pns ON pns.no_pegawai = pengguna.no_pegawai").
Where("pengguna.tipe_pegawai = ?", "pns").
Find(&results).Error
} else if tipePegawai == "non-pns" {
return db.Model(&models.Pengguna{}).
Joins("LEFT JOIN nonPns ON nonPns.no_pegawai = pengguna.no_pegawai").
Where("pengguna.tipe_pegawai = ?", "non-pns").
Find(&results).Error
}
// ...
}
Notification Target Type
Saat mengirim notifikasi, tipe pegawai dikonversi ke format notification service:
tipePegawai := "pegawai"
if result.TipePegawai == "unit-kerja" {
tipePegawai = "unit_kerja"
} else {
tipePegawai = "pegawai"
}
utils.SendNotificationRequest(
// ...
tipePegawai, // tipe_target
// ...
)
Best Practices
-
Selalu Validasi sebelum insert/update
if !utils.IsValidTipePegawai(req.TipePegawai) {
return error
} -
Case Sensitivity - Semua value lowercase
tipePegawai := strings.ToLower(input) -
Consistent Usage - Gunakan konstanta jika sering digunakan
const (
TipePNS = "pns"
TipeNonPNS = "non-pns"
TipeUnitKerja = "unit-kerja"
)