Files
presensi/app/Modules/Discipline/Controllers/ViolationAdminController.php
2026-03-05 14:37:36 +07:00

91 lines
3.0 KiB
PHP

<?php
namespace App\Modules\Discipline\Controllers;
use App\Core\BaseApiController;
use App\Modules\Discipline\Models\ViolationModel;
use CodeIgniter\HTTP\ResponseInterface;
/**
* Admin CRUD untuk master violations (jenis pelanggaran).
* Akses via /api/discipline/violations-admin (hanya ADMIN).
*/
class ViolationAdminController extends BaseApiController
{
/**
* POST /api/discipline/violations-admin
*/
public function create(): ResponseInterface
{
$payload = $this->request->getJSON(true) ?? [];
$categoryId = (int) ($payload['category_id'] ?? 0);
$title = trim((string) ($payload['title'] ?? ''));
$score = (int) ($payload['score'] ?? 0);
$description = $payload['description'] ?? null;
$isActive = array_key_exists('is_active', $payload) ? (int) (bool) $payload['is_active'] : 1;
if ($categoryId <= 0 || $title === '') {
return $this->errorResponse('category_id dan title wajib diisi', null, null, ResponseInterface::HTTP_UNPROCESSABLE_ENTITY);
}
$model = new ViolationModel();
$model->insert([
'category_id' => $categoryId,
'title' => $title,
'description' => $description,
'score' => $score,
'is_active' => $isActive,
]);
if ($model->errors()) {
return $this->errorResponse(implode(' ', $model->errors()), $model->errors(), null, ResponseInterface::HTTP_UNPROCESSABLE_ENTITY);
}
return $this->successResponse(null, 'Pelanggaran berhasil ditambahkan');
}
/**
* PUT /api/discipline/violations-admin/{id}
*/
public function update(int $id): ResponseInterface
{
$model = new ViolationModel();
$row = $model->find($id);
if (! $row) {
return $this->errorResponse('Pelanggaran tidak ditemukan', null, null, ResponseInterface::HTTP_NOT_FOUND);
}
$payload = $this->request->getJSON(true) ?? [];
$data = [];
if (isset($payload['category_id'])) {
$data['category_id'] = (int) $payload['category_id'];
}
if (isset($payload['title'])) {
$data['title'] = trim((string) $payload['title']);
}
if (isset($payload['description'])) {
$data['description'] = $payload['description'];
}
if (isset($payload['score'])) {
$data['score'] = (int) $payload['score'];
}
if (isset($payload['is_active'])) {
$data['is_active'] = (int) (bool) $payload['is_active'];
}
if ($data === []) {
return $this->successResponse(null, 'Tidak ada perubahan');
}
$model->update($id, $data);
if ($model->errors()) {
return $this->errorResponse(implode(' ', $model->errors()), $model->errors(), null, ResponseInterface::HTTP_UNPROCESSABLE_ENTITY);
}
return $this->successResponse(null, 'Pelanggaran berhasil diperbarui');
}
}