using AutomationDAL.DTO.Run; using AutomationDAL.Query.Run; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace AutomationDAL.CustomCode.Run; public class RunDAL : IRunDAL { private readonly IQueryExecutor _qe; public RunDAL(IQueryExecutor qe) => _qe = qe; public async Task InsertExecution(RunExecutionDTO dto, LoginDTO login, CancellationToken ct) { int newId = await _qe.ExecuteIdentityAsync(login, RunQB.INSERT_EXECUTION, new { dto.ScriptId, dto.VersionId, dto.TargetId, dto.TriggeredBy, dto.ParametersJson, TenantId = login.ClientId, CreatedById = login.UserId }).ConfigureAwait(false); return newId; } public async Task CompleteExecution(long runId, string status, string? summary, string? errorMessage, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, RunQB.COMPLETE_EXECUTION, new { RunId = runId, Status = status, Summary = summary, ErrorMessage = errorMessage, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task GetById(long runId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync(login, RunQB.GET_BY_ID, new { RunId = runId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return rows.FirstOrDefault(); } public async Task> GetHistory(int? scriptId, string? status, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, RunQB.GET_HISTORY, new { TenantId = login.ClientId, ScriptId = scriptId, Status = status }, cancellationToken: ct).ConfigureAwait(false); public async Task GetLatestStatusForScript(int scriptId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync(login, RunQB.GET_LATEST_STATUS_FOR_SCRIPT, new { ScriptId = scriptId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return rows.FirstOrDefault(); } public async Task AppendLog(long runId, string logLevel, string message, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, RunQB.INSERT_LOG, new { RunId = runId, LogLevel = logLevel, Message = message }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetLogs(long runId, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, RunQB.GET_LOGS_BY_RUN, new { RunId = runId }, cancellationToken: ct).ConfigureAwait(false); public async Task ClaimNextJob(string supportedRuntimes, int agentId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync(login, RunQB.CLAIM_NEXT_JOB, new { TenantId = login.ClientId, SupportedRuntimes = supportedRuntimes, AgentId = agentId }, cancellationToken: ct).ConfigureAwait(false); return rows.FirstOrDefault(); } public async Task GetJobDetail(long runId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync(login, RunQB.GET_JOB_DETAIL, new { RunId = runId }, cancellationToken: ct).ConfigureAwait(false); return rows.FirstOrDefault(); } public async Task InsertArtifact(RunArtifactDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteIdentityAsync(login, RunQB.INSERT_ARTIFACT, new { dto.RunId, dto.ArtifactType, dto.BlobUri }).ConfigureAwait(false); public async Task> GetArtifacts(long runId, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, RunQB.GET_ARTIFACTS_BY_RUN, new { RunId = runId }, cancellationToken: ct).ConfigureAwait(false); }