using Admin.NET.Plugin.AiDOP.Entity.S8; using Admin.NET.Plugin.AiDOP.Service.S8; namespace Admin.NET.Plugin.AiDOP.Controllers.S8; [ApiController] [Route("api/aidop/s8/config/watch-rules")] [NonUnify] public class AdoS8ConfigWatchRulesController : ControllerBase { private readonly S8WatchRuleService _svc; public AdoS8ConfigWatchRulesController(S8WatchRuleService svc) => _svc = svc; [HttpGet] public async Task ListAsync([FromQuery] long tenantId = 1, [FromQuery] long factoryId = 1) => Ok(await _svc.ListAsync(tenantId, factoryId)); [HttpPost] public async Task CreateAsync([FromBody] AdoS8WatchRule body) { try { return Ok(await _svc.CreateAsync(body)); } catch (S8BizException ex) { return BadRequest(new { message = ex.Message }); } } [HttpPut("{id:long}")] public async Task UpdateAsync(long id, [FromBody] AdoS8WatchRule body) { try { return Ok(await _svc.UpdateAsync(id, body)); } catch (S8BizException ex) { return BadRequest(new { message = ex.Message }); } } [HttpDelete("{id:long}")] public async Task DeleteAsync(long id) { await _svc.DeleteAsync(id); return Ok(); } [HttpPost("{id:long}/test")] public async Task TestAsync(long id) { try { return Ok(await _svc.TestAsync(id)); } catch (S8BizException ex) { return BadRequest(new { message = ex.Message }); } } /// /// R4 安全更新:仅修改 params_json 与 enabled,绝不接受 expression / rule_code / data_source_id / /// scene_code / watch_object_type / rule_type / source_object_type 等敏感字段。 /// 服务端按 rule_type 用对应 evaluator 的 Params.Parse 进行 schema 校验。 /// [HttpPut("{id:long}/params")] public async Task UpdateParamsAsync(long id, [FromBody] S8WatchRuleParamsPayload body) { try { return Ok(await _svc.UpdateParamsAsync(id, body)); } catch (S8BizException ex) { return BadRequest(new { message = ex.Message }); } } }