tenantId(); $page = (int) ($params['page'] ?? 1); $size = (int) ($params['size'] ?? 20); $q = trim((string) ($params['q'] ?? '')); $onlyActive = $params['only_active'] ?? null; $query = Client::query()->where('tenant_id', $tenantId); if ($q !== '') { $query->where(function ($qq) use ($q) { $qq->where('name', 'like', "%{$q}%") ->orWhere('client_code', 'like', "%{$q}%") ->orWhere('contact_person', 'like', "%{$q}%"); }); } if ($onlyActive !== null) { $query->where('is_active', (bool) $onlyActive); } $query->orderBy('client_code')->orderBy('id'); return $query->paginate($size, ['*'], 'page', $page); } /** 단건 */ public function show(int $id) { $tenantId = $this->tenantId(); $client = Client::where('tenant_id', $tenantId)->find($id); if (! $client) { throw new NotFoundHttpException(__('error.not_found')); } return $client; } /** 생성 */ public function store(array $data) { $tenantId = $this->tenantId(); // client_code 중복 검사 $exists = Client::where('tenant_id', $tenantId) ->where('client_code', $data['client_code']) ->exists(); if ($exists) { throw new BadRequestHttpException(__('error.duplicate_code')); } $data['tenant_id'] = $tenantId; $data['is_active'] = $data['is_active'] ?? true; return Client::create($data); } /** 수정 */ public function update(int $id, array $data) { $tenantId = $this->tenantId(); $client = Client::where('tenant_id', $tenantId)->find($id); if (! $client) { throw new NotFoundHttpException(__('error.not_found')); } // client_code 변경 시 중복 검사 if (isset($data['client_code']) && $data['client_code'] !== $client->client_code) { $exists = Client::where('tenant_id', $tenantId) ->where('client_code', $data['client_code']) ->exists(); if ($exists) { throw new BadRequestHttpException(__('error.duplicate_code')); } } $client->update($data); return $client->refresh(); } /** 삭제 */ public function destroy(int $id) { $tenantId = $this->tenantId(); $client = Client::where('tenant_id', $tenantId)->find($id); if (! $client) { throw new NotFoundHttpException(__('error.not_found')); } // 주문 존재 검사 if ($client->orders()->exists()) { throw new BadRequestHttpException(__('error.has_orders')); } $client->delete(); return 'success'; } /** 활성/비활성 토글 */ public function toggle(int $id) { $tenantId = $this->tenantId(); $client = Client::where('tenant_id', $tenantId)->find($id); if (! $client) { throw new NotFoundHttpException(__('error.not_found')); } $client->is_active = ! $client->is_active; $client->save(); return $client->refresh(); } }