using LCU.Api.Internal.DispatcherLib.Repositories; using Microsoft.Data.SqlClient; using System.Collections.Generic; namespace LCU.Api.Internal.Dispatcher.Services { public class CleanUpJobSettingService : ICleanUpJobSettingService { private readonly ICleanUpJobSettingRepository _cleanUpJobSettingRepository; private readonly IUnitOfWork _unitOfWork; public CleanUpJobSettingService(IUnitOfWork unitOfWork, ICleanUpJobSettingRepository cleanUpJobSettingRepository) { _unitOfWork = unitOfWork; _cleanUpJobSettingRepository = cleanUpJobSettingRepository; } public async Task> GetAsync() { try { return await _cleanUpJobSettingRepository.ListAsync(); } catch (Exception exception) { Log.Error(exception, "Failure retrieving CleanUpJobSetting."); throw new ServiceException("Failure retrieving CleanUpJobSetting."); } } public async Task GetByCleanUpJobSettingIdAsync(int cleanUpJobSettingId) { try { return await _cleanUpJobSettingRepository.FindByCleanUpJobSettingIdAsync(cleanUpJobSettingId); } catch (ArgumentNullException exception) { Log.Error(exception, $"Failure getting dispatcher Clean Up Job Settings by Id. CleanUpJobSettingId was null"); return null; } catch (Exception exception) { Log.Error(exception, "Failure retrieving dispatcher Clean Up Job Settings. CleanUpJobSettingId: {@cleanUpJobSettingId}", cleanUpJobSettingId); throw new ServiceException($"Failure retrieving dispatcher Clean Up Job Settings. CleanUpJobSettingId: {cleanUpJobSettingId}"); } } public async Task SaveAsync(CleanUpJobSetting request) { try { var result = await _cleanUpJobSettingRepository.AddAsync(request); await _unitOfWork.CompleteAsync(); return result; } catch (Exception exception) { Log.Error(exception, "Failure saving dispatcher Clean Up Job Settings. CleanUpJobSettingId: {@request.CleanUpJobSettingId}", request.CleanUpJobSettingId); throw new ServiceException($"Failure saving dispatcher Clean Up Job Settings. CleanUpJobSettingId: {request.CleanUpJobSettingId}"); } } public async Task UpdateAsync(CleanUpJobSetting request) { try { var existing = await GetByCleanUpJobSettingIdAsync(request.CleanUpJobSettingId); if(existing == null) { return null; } existing.CompletionDaysPast = request.CompletionDaysPast; _cleanUpJobSettingRepository.Update(existing); await _unitOfWork.CompleteAsync(); return existing; } catch (SqlException sqlException) { Log.Error(sqlException, "SQL Failure updating dispatcher Clean Up Job Settings. CleanUpJobSettingId: {@request.CleanUpJobSettingId}", request.CleanUpJobSettingId); throw new ServiceException($"SQL Failure updating dispatcher Clean Up Job Settings. CleanUpJobSettingId: {request.CleanUpJobSettingId}"); } catch (Exception exception) { Log.Error(exception, "SQL Failure updating dispatcher Clean Up Job Settings. CleanUpJobSettingId: {@request.CleanUpJobSettingId}", request.CleanUpJobSettingId); throw new ServiceException($"SQL Failure updating dispatcher Clean Up Job Settings. CleanUpJobSettingId: {request.CleanUpJobSettingId}"); } } public async Task DeleteAsync(int cleanUpJobSettingId) { try { var cleanUpJobSetting = await _cleanUpJobSettingRepository.FindByCleanUpJobSettingIdAsync(cleanUpJobSettingId); ArgumentNullException.ThrowIfNull(cleanUpJobSetting); _cleanUpJobSettingRepository.Remove(cleanUpJobSetting); await _unitOfWork.CompleteAsync(); } catch (SqlException sqlException) { Log.Error(sqlException, "SQL Failure removing dispatcher Clean Up Job Settings. CleanUpJobSettingId: {@cleanUpJobSettingId}", cleanUpJobSettingId); throw new ServiceException($"SQL Failure removing dispatcher Clean Up Job Settings. CleanUpJobSettingId: {cleanUpJobSettingId}"); } catch (Exception exception) { Log.Error(exception, "Failure removing dispatcher Clean Up Job Settings. CleanUpJobSettingId: {@cleanUpJobSettingId}", cleanUpJobSettingId); throw new ServiceException($"Failure removing dispatcher Clean Up Job Settings. CleanUpJobSettingId: {cleanUpJobSettingId}"); } } } }