Job Level API - Validation Rules Documentation
Overview
Dokumentasi aturan validasi untuk Job Level API.
Validation Rules
CREATE Job Level
Required Fields
name(string) – Nama job level (contoh: Junior, Senior, Manager)
Optional Fields
description(string)
Business Rules
1. Key Auto-Generation
Rule: Field key di-generate dari name dengan JobLevelHelper.generateSlug(name).
Tidak ada suffix otomatis jika bentrok — key harus unik. Jika key sudah dipakai, create gagal.
2. Key Uniqueness
Rule: Key harus unik. Menggunakan JobLevelValidation.validateExistence(client, { key }) — jika record dengan key tersebut ada, throw.
Error Response:
{
"statusCode": 400,
"message": "Job level is exist",
"reason": "job-level.is_exist"
}
3. order_index
Rule: order_index di-set otomatis = max(order_index) + 1 dari record yang tidak soft-deleted. Client tidak mengirim order_index pada create.
4. Default Values
is_active= true pada create
UPDATE Job Level
All Fields Optional
key,name,description,order_index,is_active
Business Rules
1. Existence Check
Rule: Job level harus ada sebelum update. Idealnya menggunakan validateNotFound(client, { id }).
Catatan implementasi: Saat ini update memanggil validateExistence(client, { id }) — yang melempar jika record ada. Ini kemungkinan bug; untuk update seharusnya memvalidasi record ada (validateNotFound), bukan tidak ada.
Error Response (jika tidak ada):
{
"statusCode": 404,
"message": "Job level is not found",
"reason": "job-level.is_not_found"
}
2. Key Regeneration
Rule: Key di-regenerate dari dto.name di update. Jika name diubah, key ikut berubah.
GET Job Level by ID
Rule: Jika tidak ditemukan → NotFoundException, reason job-level.is_not_found.
SOFT DELETE Job Level
1. Existence Check
Rule: Job level harus ada sebelum soft delete. Menggunakan validateNotFound.
Error Response:
{
"statusCode": 404,
"message": "Job level is not found",
"reason": "job-level.is_not_found"
}
2. Soft Delete Behavior
- Set
deleted_at,deleted_by,deleted_by_name.
Validation Module Reference
| Method | Keterangan |
|---|---|
| validateExistence(client, where) | Throw 400 job-level.is_exist jika record ada (untuk validasi key unik) |
| validateNotFound(client, where) | Throw 404 job-level.is_not_found jika record tidak ada |
Error Code Reference
| HTTP | Reason Code | Trigger |
|---|---|---|
| 404 | job-level.is_not_found | Record tidak ada |
| 400 | job-level.is_exist | Key sudah dipakai (create) |