successPaginated( $this->service->list($this->scope($request), $request->validated(), $request->user(), $this->tenantId($request)), CustomerResource::class, 'Daftar customer berhasil diambil' ); } public function options(Request $request) { return $this->success( $this->service->options($request->user(), $this->tenantId($request)), 'Pilihan relasi customer berhasil diambil' ); } public function store(StoreCustomerRequest $request) { return $this->created( new CustomerResource($this->service->create($request->validated(), $request->user(), $this->tenantId($request))), 'Customer berhasil didaftarkan' ); } public function show(Request $request, int $id) { $customer = $this->service->find($id, $this->scope($request) === 'trash'); $this->authorizeTenant($request, $customer->tenant_id); return $this->success(new CustomerResource($customer), 'Detail customer berhasil diambil'); } public function update(UpdateCustomerRequest $request, int $id) { $customer = $this->service->find($id); $this->authorizeTenant($request, $customer->tenant_id); return $this->updated( new CustomerResource($this->service->update($customer, $request->validated(), $request->user())), 'Data customer berhasil diperbarui' ); } public function activate(ActivateCustomerRequest $request, int $id) { $customer = $this->service->find($id); $this->authorizeTenant($request, $customer->tenant_id); return $this->updated(new CustomerResource($this->service->activate($customer, $request->validated())), 'Customer berhasil diaktifkan'); } public function deactivate(Request $request, int $id) { $customer = $this->service->find($id); $this->authorizeTenant($request, $customer->tenant_id); return $this->updated(new CustomerResource($this->service->deactivate($customer)), 'Customer berhasil dinonaktifkan'); } public function destroy(Request $request, int $id) { $customer = $this->service->find($id); $this->authorizeTenant($request, $customer->tenant_id); $this->service->trash($customer); return $this->deleted('Customer dipindahkan ke Sampah'); } public function restore(Request $request, int $id) { $customer = $this->service->find($id, true); $this->authorizeTenant($request, $customer->tenant_id); return $this->updated(new CustomerResource($this->service->restore($customer)), 'Customer berhasil dipulihkan'); } public function forceDelete(Request $request, int $id) { $customer = $this->service->find($id, true); $this->authorizeTenant($request, $customer->tenant_id); $this->service->forceDelete($customer); return $this->deleted('Customer dihapus permanen'); } private function scope(Request $request): string { return $request->route()->defaults['customer_scope'] ?? 'orders'; } private function tenantId(Request $request): ?int { return $request->attributes->get('tenant_id'); } private function authorizeTenant(Request $request, int $tenantId): void { abort_unless($request->user()->isMasterAdmin() || $tenantId === $this->tenantId($request), 403); } }