authorize('viewAny', AutomationRule::class); $rules = AutomationRule::with(['zone', 'targetDevice', 'conditionSourceDevice']) ->orderByDesc('id') ->get(); return AutomationRuleResource::collection($rules); } public function store(AutomationRuleRequest $request) { $rule = new AutomationRule($this->mapActionParams($request->validated())); $rule->user()->associate($request->user()); $rule->save(); return (new AutomationRuleResource($rule))->response()->setStatusCode(201); } public function update(AutomationRuleRequest $request, AutomationRule $automation_rule) { $automation_rule->update($this->mapActionParams($request->validated())); return new AutomationRuleResource($automation_rule); } public function destroy(AutomationRule $automation_rule) { $this->authorize('delete', $automation_rule); $automation_rule->delete(); return response()->noContent(); } /** * Mirrors AutomationRuleController@mapActionParams on the web side — * "level" is a friendlier stand-in for action_params over the wire too, * so mobile clients don't need to know the {"level": ...} shape. * * @param array $data * @return array */ private function mapActionParams(array $data): array { $data['action_params'] = $data['action_type'] === 'set_level' ? ['level' => $data['level']] : []; unset($data['level']); return $data; } }