authorizeAbility($request, 'counters.view'); $owner = $this->ownerRef($request); $organization = $this->organization($request); $counters = Counter::owned($owner) ->where('organization_id', $organization->id) ->with('serviceQueues') ->orderBy('name') ->get() ->map(fn (Counter $c) => [ 'uuid' => $c->uuid, 'name' => $c->name, 'code' => $c->code, 'status' => $c->status, 'queues' => $c->serviceQueues->pluck('name'), ]); return response()->json(['data' => $counters]); } public function store(Request $request): JsonResponse { $this->authorizeAbility($request, 'counters.manage'); $owner = $this->ownerRef($request); $organization = $this->organization($request); $validated = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'code' => ['nullable', 'string', 'max:50'], 'branch_id' => ['required', 'integer'], 'department_id' => ['nullable', 'integer'], 'queue_ids' => ['nullable', 'array'], 'queue_ids.*' => ['uuid'], ]); $counter = Counter::create([ 'owner_ref' => $owner, 'organization_id' => $organization->id, 'branch_id' => $validated['branch_id'], 'department_id' => $validated['department_id'] ?? null, 'name' => $validated['name'], 'code' => $validated['code'] ?? null, 'status' => 'offline', 'is_active' => true, ]); if (! empty($validated['queue_ids'])) { $queueIds = ServiceQueue::owned($owner)->whereIn('uuid', $validated['queue_ids'])->pluck('id'); $counter->serviceQueues()->sync($queueIds); } AuditLogger::record($owner, 'counter.created', $organization->id, $owner, Counter::class, $counter->id); return response()->json(['data' => ['uuid' => $counter->uuid, 'name' => $counter->name]], 201); } }