Skip to main content

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,
}
ValueDeskripsi
pnsPegawai Negeri Sipil
non-pnsPegawai Non-PNS (PJLP/NPTT)
unit-kerjaUnit Kerja

Function

IsValidTipePegawai

Memvalidasi apakah string tipe pegawai valid.

func IsValidTipePegawai(tipePegawai string) bool

Parameters

ParameterTypeDeskripsi
tipePegawaistringTipe pegawai yang akan divalidasi

Return

  • true - Tipe pegawai valid
  • false - 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')),
-- ...
);

Setiap tipe pegawai memiliki tabel data yang berbeda:

Tipe PegawaiTabel DataNo Pegawai Field
pnspns, pnsKepegawaiannrk
non-pnsnonPns, nonPnsKepegawaiannptt_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

  1. Selalu Validasi sebelum insert/update

    if !utils.IsValidTipePegawai(req.TipePegawai) {
    return error
    }
  2. Case Sensitivity - Semua value lowercase

    tipePegawai := strings.ToLower(input)
  3. Consistent Usage - Gunakan konstanta jika sering digunakan

    const (
    TipePNS = "pns"
    TipeNonPNS = "non-pns"
    TipeUnitKerja = "unit-kerja"
    )