| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using Admin.NET.Plugin.AiDOP.Service.S8;
- using Microsoft.Extensions.Configuration;
- namespace Admin.NET.Plugin.AiDOP.Controllers.S8;
- /// <summary>
- /// G-01 最小补验内部入口(非正式调度接入点)。
- /// 仅用于触发 S8 自动监控 MVP 主链一次,供端到端联调与验收取证;
- /// 不对外暴露业务语义,不作为长期 API。
- /// G08-06:移除匿名访问;由 appsettings 的 `WatchScheduler:DebugEndpointEnabled` 控制是否启用,
- /// 未启用时所有 Action 返回 404(语义等价于"未注册")。
- /// </summary>
- [ApiController]
- [Route("api/aidop/s8/watch-debug")]
- [NonUnify]
- public class AdoS8WatchDebugController : ControllerBase
- {
- private readonly S8WatchSchedulerService _svc;
- private readonly bool _debugEndpointEnabled;
- public AdoS8WatchDebugController(S8WatchSchedulerService svc, IConfiguration configuration)
- {
- _svc = svc;
- _debugEndpointEnabled = configuration.GetValue("WatchScheduler:DebugEndpointEnabled", false);
- }
- [HttpPost("run-once")]
- public async Task<IActionResult> RunOnceAsync(
- [FromQuery] long tenantId = 1,
- [FromQuery] long factoryId = 1)
- {
- if (!_debugEndpointEnabled) return NotFound();
- var results = await _svc.CreateExceptionsAsync(tenantId, factoryId);
- return Ok(new
- {
- count = results.Count,
- results = results.Select(r => new
- {
- created = r.Created,
- skipped = r.Skipped,
- createdExceptionId = r.CreatedExceptionId,
- reason = r.Reason,
- errorMessage = r.ErrorMessage,
- sourceRuleId = r.DedupResult.Hit.SourceRuleId,
- relatedObjectCode = r.DedupResult.Hit.RelatedObjectCode,
- matchedExceptionId = r.DedupResult.MatchedExceptionId
- })
- });
- }
- /// <summary>
- /// S2-EW:仅供 e2e fixture 使用的 TEST_G09_ 数据软删入口。
- /// 安全契约:
- /// - 与 run-once 共用 _debugEndpointEnabled;未启用时 404。
- /// - tenantId / factoryId 必须显式传入(无默认值),缺参由 ASP.NET 返回 400。
- /// - 前缀 TEST_G09_ 在 service 端硬编码,本接口不接受 prefix 入参。
- /// - 仅 soft delete(SET IsDeleted=true),不触发物理 DELETE。
- /// </summary>
- [HttpDelete("test-cleanup")]
- public async Task<IActionResult> TestCleanupAsync(
- [FromQuery] long? tenantId,
- [FromQuery] long? factoryId,
- [FromServices] S8ExceptionService exceptionSvc)
- {
- if (!_debugEndpointEnabled) return NotFound();
- if (tenantId is null || factoryId is null)
- return BadRequest(new { message = "tenantId and factoryId are required (no defaults)." });
- var deletedCount = await exceptionSvc.SoftDeleteTestPrefixAsync(tenantId.Value, factoryId.Value);
- return Ok(new { deletedCount });
- }
- }
|