jenis_komoditas model,api controller dan resources

This commit is contained in:
2026-06-03 15:05:52 +07:00
parent 7cc3e0e8f1
commit b15504e009
5 changed files with 226 additions and 2 deletions
@@ -0,0 +1,141 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Gate;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
use Illuminate\Validation\Rule;
use App\Http\Resources\Pertanian\JenisKomoditasResource;
use App\Models\Pertanian\JenisKomoditas;
class JenisKomoditasController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request): AnonymousResourceCollection
{
if (!Gate::any(['petani', 'fasilitator', 'super_admin'])) {
abort(403);
}
$size = $request->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);
}
}
@@ -116,15 +116,19 @@ class TanamanController extends Controller
}),
],
'latitude' => ['nullable', 'numeric', 'between:-90,90', 'required_with:longitude'],
'longitude' => ['nullable', 'numeric', 'between:-180,180', 'required_with:latitude'],
'longitude' => ['nullable ', 'numeric', 'between:-180,180', 'required_with:latitude'],
'kondisi_tanaman' => ['nullable', 'string', new Enum(KondisiTanaman::class)],
'uid' => ['required', 'string'],
'jenis_komoditas_id' => ['nullable', 'exists:jenis_komoditas,id'],
'komoditas_kode' => ['nullable', 'string', 'max:255'],
]);
$tanaman = Tanaman::create([
...$validated,
'profile_id' => $profile->id,
'uid' => $validated['uid'] ?? $request->input('uid'),
'komoditas_kode' => $validated['komoditas_kode'] ?? $request->input('komoditas_kode'),
'jenis_komoditas_id' => $validated['jenis_komoditas_id'] ?? $request->input('jenis_komoditas_id'),
]);
return (new TanamanResource($tanaman))
@@ -0,0 +1,26 @@
<?php
namespace App\Http\Resources\Pertanian;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class JenisKomoditasResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'nama' => $this->nama,
'kode' => $this->kode,
'keterangan' => $this->keterangan,
'created_at' => $this->created_at?->toIso8601String(),
'updated_at' => $this->updated_at?->toIso8601String(),
];
}
}