using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using JobEngineDAL.DTOs; using JobEngineDAL.Interfaces; using JobEngineDAL.Query; using Newtonsoft.Json; namespace JobEngineDAL.Implementations { public class JobDefineDAL : IJobDefineDAL { private readonly IQueryExecutor _qe; public JobDefineDAL(IQueryExecutor queryExecutor) => _qe = queryExecutor; public async Task> GetJobsAsync(LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, JobDefineQB.GET_JOBS, new { TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task GetJobDetailAsync(int jobId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync(login, JobDefineQB.GET_JOB_DETAIL, new { JobId = jobId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetAllActiveJobsAsync(LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, JobDefineQB.GET_ALL_ACTIVE_JOBS, null, cancellationToken: ct).ConfigureAwait(false); public async Task SaveJobAsync(JobDefineDTO dto, LoginDTO login, CancellationToken ct) { if (dto.JobId == 0) { return await _qe.ExecuteIdentityAsync(login, JobDefineQB.SAVE_JOB_INSERT, new { dto.SchedulerId, dto.JobName, WebServiceId = dto.WebServiceId == 0 ? -1 : dto.WebServiceId, CriteriaConfigId = dto.CriteriaConfigId == 0 ? -1 : dto.CriteriaConfigId, dto.Status, MenuId = dto.MenuId == 0 ? -1 : dto.MenuId, TenantId = login.ClientId, dto.UriParameterValue, dto.MaxRetries, dto.TimeoutSeconds, IsConcurrent = dto.IsConcurrent ? 1 : 0, dto.JobCategory, dto.SourceModule, dto.SourceObjectId, dto.DaprPubSubTopic, CreatedBy = login.UserId }).ConfigureAwait(false); } await _qe.ExecuteAsync(login, JobDefineQB.SAVE_JOB_UPDATE, new { dto.SchedulerId, dto.JobName, WebServiceId = dto.WebServiceId == 0 ? -1 : dto.WebServiceId, CriteriaConfigId = dto.CriteriaConfigId == 0 ? -1 : dto.CriteriaConfigId, dto.Status, MenuId = dto.MenuId == 0 ? -1 : dto.MenuId, dto.UriParameterValue, dto.MaxRetries, dto.TimeoutSeconds, IsConcurrent = dto.IsConcurrent ? 1 : 0, dto.JobCategory, dto.SourceModule, dto.SourceObjectId, dto.DaprPubSubTopic, UpdatedBy = login.UserId, dto.JobId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return dto.JobId; } public async Task DeleteJobAsync(int jobId, int updatedBy, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, JobDefineQB.DELETE_JOB, new { JobId = jobId, UpdatedBy = updatedBy, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task PauseJobAsync(int jobId, int updatedBy, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, JobDefineQB.PAUSE_JOB, new { JobId = jobId, UpdatedBy = updatedBy, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task ResumeJobAsync(int jobId, int updatedBy, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, JobDefineQB.RESUME_JOB, new { JobId = jobId, UpdatedBy = updatedBy, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateLastRunAsync(int jobId, DateTime? nextRunTime, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, JobDefineQB.UPDATE_LAST_RUN, new { JobId = jobId, NextRunTime = nextRunTime, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateNextRunAsync(int jobId, DateTime? nextRunTime, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, JobDefineQB.UPDATE_NEXT_RUN, new { JobId = jobId, NextRunTime = nextRunTime, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task UpsertBySourceAsync(JobDefineDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteScalarAsync(login, JobDefineQB.UPSERT_BY_SOURCE, new { dto.SourceModule, dto.SourceObjectId, TenantId = login.ClientId, dto.JobName, dto.SchedulerId, WebServiceId = dto.WebServiceId == 0 ? -1 : dto.WebServiceId, dto.Status, dto.MaxRetries, dto.TimeoutSeconds, dto.DaprPubSubTopic, dto.JobCategory, CreatedBy = login.UserId, UpdatedBy = login.UserId }, cancellationToken: ct).ConfigureAwait(false); } }