using Admin.NET.Plugin.AiDOP.Service.S8;
using Microsoft.Extensions.Configuration;
namespace Admin.NET.Plugin.AiDOP.Controllers.S8;
///
/// G-01 最小补验内部入口(非正式调度接入点)。
/// 仅用于触发 S8 自动监控 MVP 主链一次,供端到端联调与验收取证;
/// 不对外暴露业务语义,不作为长期 API。
/// G08-06:移除匿名访问;由 appsettings 的 `WatchScheduler:DebugEndpointEnabled` 控制是否启用,
/// 未启用时所有 Action 返回 404(语义等价于"未注册")。
///
[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 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
})
});
}
}