integer('size') ?: 10; $jenisKomoditasList = JenisKomoditas::when($request->search, function ($q, $search) { $search = strtolower($search); $q->whereRaw('lower(nama) like ?', ["%{$search}%"]); }) ->when($request->kode, fn($q, $v) => $q->where('kode', $v)); if ($request->filled('sort')) { $dir = str_starts_with($request->sort, '-') ? 'desc' : 'asc'; $column = ltrim($request->sort, '-'); $allowed = ['id', 'nama', 'kode']; if (in_array($column, $allowed)) { $jenisKomoditasList->orderBy($column, $dir); } } else { $jenisKomoditasList->orderBy('nama', 'asc'); } $jenisKomoditasList = $jenisKomoditasList->paginate($size); return JenisKomoditasResource::collection($jenisKomoditasList); } /** * Show the form for creating a new resource. */ public function create() { // } /** * Store a newly created resource in storage. */ public function store(Request $request): JsonResponse { if (!Gate::any(['petani', 'fasilitator', 'super_admin'])) { abort(403); } $validated = $request->validate([ 'nama' => ['required', 'string', 'max:255'], 'kode' => ['required', 'string', 'max:50', 'unique:jenis_komoditas,kode'], 'keterangan' => ['nullable', 'string'], ]); $jenisKomoditas = JenisKomoditas::create($validated); return (new JenisKomoditasResource($jenisKomoditas)) ->response() ->setStatusCode(201); } /** * Display the specified resource. */ public function show(string $id): JsonResponse { if (!Gate::any(['petani', 'fasilitator', 'super_admin'])) { abort(403); } $jenisKomoditas = JenisKomoditas::findOrFail($id); return (new JenisKomoditasResource($jenisKomoditas))->response(); } /** * Show the form for editing the specified resource. */ public function edit(string $id) { // } /** * Update the specified resource in storage. */ public function update(Request $request, string $id): JsonResponse { if (!Gate::any(['petani', 'fasilitator', 'super_admin'])) { abort(403); } $jenisKomoditas = JenisKomoditas::findOrFail($id); $validated = $request->validate([ 'nama' => ['required', 'string', 'max:255'], 'kode' => ['required', 'string', 'max:50', Rule::unique('jenis_komoditas', 'kode')->ignore($jenisKomoditas->id)], 'keterangan' => ['nullable', 'string'], ]); $jenisKomoditas->update($validated); return (new JenisKomoditasResource($jenisKomoditas))->response(); } /** * Remove the specified resource from storage. */ public function destroy(string $id): JsonResponse { if (!Gate::any(['petani', 'fasilitator', 'super_admin'])) { abort(403); } $jenisKomoditas = JenisKomoditas::findOrFail($id); $jenisKomoditas->delete(); return response()->json(null, 204); } }