34 lines
2.2 KiB
PHP
34 lines
2.2 KiB
PHP
|
|
<?php
|
||
|
|
namespace App\Http\Controllers\Api;
|
||
|
|
|
||
|
|
use App\Http\Controllers\Controller;
|
||
|
|
use App\Models\Cat;
|
||
|
|
use Illuminate\Http\Request;
|
||
|
|
use Illuminate\Support\Facades\Gate;
|
||
|
|
|
||
|
|
class CatController extends Controller
|
||
|
|
{
|
||
|
|
public function index(Request $request)
|
||
|
|
{
|
||
|
|
Gate::authorize('check-access', ['cats', 'read']);
|
||
|
|
$cats = Cat::with(['registrations.association'])
|
||
|
|
->when($request->search, fn($q,$s)=>$q->where(fn($x)=>$x->where('nama_kucing','like',"%$s%")->orWhere('microchip','like',"%$s%")->orWhere('kode_ems','like',"%$s%")))
|
||
|
|
->when($request->gender, fn($q,$v)=>$q->where('jenis_kelamin',$v))
|
||
|
|
->orderBy('nama_kucing')->paginate(min((int)$request->get('per_page',20),50));
|
||
|
|
$cats->getCollection()->transform(fn($c)=>$this->payload($c));
|
||
|
|
return response()->json($cats);
|
||
|
|
}
|
||
|
|
public function show(Cat $cat)
|
||
|
|
{
|
||
|
|
Gate::authorize('check-access', ['cats', 'read']);
|
||
|
|
$cat->load(['sire:id,nama_kucing','dam:id,nama_kucing','registrations.association','registrations.documents','weightHistories'=>fn($q)=>$q->latest('tanggal_timbang')->take(30)]);
|
||
|
|
return response()->json(['data'=>$this->payload($cat,true)]);
|
||
|
|
}
|
||
|
|
private function payload(Cat $c, bool $detail=false): array
|
||
|
|
{
|
||
|
|
$base=['id'=>$c->id,'nama'=>$c->nama_kucing,'foto'=>$c->foto_url,'ras'=>$c->ras,'jenis_kelamin'=>$c->jenis_kelamin,'tanggal_lahir'=>$c->tanggal_lahir?->format('Y-m-d'),'usia'=>$c->age,'kode_ems'=>$c->kode_ems,'microchip'=>$c->microchip,'status'=>$c->status,'berat_terakhir'=>(float)($c->berat_badan ?? $c->berat_terakhir ?? 0),'lokasi'=>$c->lokasi_kandang,'registrasi'=>$c->registrations->map(fn($r)=>['id'=>$r->id,'asosiasi'=>$r->association?->code,'nama_asosiasi'=>$r->association?->name,'nomor_registrasi'=>$r->registration_number,'nomor_pedigree'=>$r->pedigree_number,'nomor_sertifikat'=>$r->certificate_number,'title'=>$r->title,'utama'=>$r->is_primary])->values()];
|
||
|
|
if($detail){$base['induk_jantan']=$c->sire?->nama_kucing;$base['induk_betina']=$c->dam?->nama_kucing;$base['riwayat_berat']=$c->weightHistories->map(fn($w)=>['id'=>$w->id,'berat'=>(float)$w->berat,'tanggal'=>$w->tanggal_timbang?->format('Y-m-d') ?? (string)$w->tanggal_timbang])->values();}
|
||
|
|
return $base;
|
||
|
|
}
|
||
|
|
}
|