Files
2026-04-20 14:47:24 -05:00

151 lines
4.9 KiB
C#

using System;
using System.Data.SqlClient;
using System.Threading.Tasks;
using LCU.API.Collections.RepoApi.Exceptions;
using LCU.API.Collections.RepoApi.Models.Filters;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Models.Results;
using LCU.Shared.Collections.RepoApiLib.Repositories;
using Serilog;
namespace LCU.API.Collections.RepoApi.Services
{
public class AuditRecordService : IAuditRecordService
{
private readonly IAuditRecordRepository _repoAccountRepository;
private readonly IUnitOfWork _unitOfWork;
public AuditRecordService(
IAuditRecordRepository repoAccountRepository,
IUnitOfWork unitOfWork)
{
_repoAccountRepository = repoAccountRepository;
_unitOfWork = unitOfWork;
}
public async Task<PagedResult<AuditRecord>> ListAll(PageFilter filter)
{
try
{
return await _repoAccountRepository.ListAllAsync(filter.Page, filter.Limit);
}
catch (Exception ex)
{
Log.Error(ex, $"Failure retrieving AuditRecords with page filter {filter}",filter);
throw new ServerErrorException();
}
}
public async Task<AuditRecord> SaveAsync(AuditRecord repoAccount)
{
try
{
await _repoAccountRepository.AddAsync(repoAccount);
await _unitOfWork.CompleteAsync();
return repoAccount;
}
catch (Exception ex)
{
Log.Error(ex, $"Failure saving AuditRecord for repoAccount: {repoAccount}", repoAccount);
throw new ServerErrorException();
}
}
public async Task<AuditRecord> Get(int id)
{
AuditRecord repoAccount;
try
{
repoAccount = await _repoAccountRepository.FindByIdAsync(id);
}
catch (Exception ex)
{
Log.Error(ex, $"Failure retrieving AuditRecord wtih id: {id}");
throw new ServerErrorException();
}
if (repoAccount == null)
{
throw new NotFoundException($" AuditRecords with id {id} not found.");
}
return repoAccount;
}
public async Task<AuditRecord> UpdateAsync(AuditRecord auditRecord)
{
AuditRecord existingAuditRecord = null;
try
{
existingAuditRecord = await _repoAccountRepository.FindByIdAsync(auditRecord.ID);
}
catch(Exception ex)
{
Log.Error(ex, $"Failure retreving existing auditRecord wtih auditrecordId: AuditRecordID: {auditRecord.ID}", auditRecord);
throw new ServerErrorException();
}
if (existingAuditRecord == null)
{
throw new NotFoundException($" AuditRecord with id {auditRecord.ID} not found.");
}
try
{
_repoAccountRepository.Update(existingAuditRecord);
await _unitOfWork.CompleteAsync();
return (existingAuditRecord);
}
catch (SqlException ex)
{
Log.Error(ex, $"SQL Failure updating AuditRecord: {auditRecord}", auditRecord);
throw new ServerErrorException();
}
catch (Exception ex)
{
Log.Error(ex, $"Failure updating AuditRecord: {auditRecord}", auditRecord);
throw new ServerErrorException();
}
}
public async Task<AuditRecord> DeleteAsync(int id)
{
AuditRecord existingAuditRecord = null;
try
{
existingAuditRecord = await _repoAccountRepository.FindByIdAsync(id);
}
catch(Exception ex)
{
Log.Error(ex, $"Failure retreving existing auditRecord wtih auditrecordId: AuditRecordID: {id}");
throw new ServerErrorException();
}
if (existingAuditRecord == null)
{
throw new NotFoundException($" AuditRecord with id {id} not found.");
}
try
{
_repoAccountRepository.Remove(existingAuditRecord);
await _unitOfWork.CompleteAsync();
return existingAuditRecord;
}
catch (SqlException ex)
{
Log.Error(ex, $"SQL Failure deleting AuditRecord with id: {id}", id);
throw new ServerErrorException();
}
catch (Exception ex)
{
Log.Error(ex, $"Failure deleting AuditRecord with id: {id}", id);
throw new ServerErrorException();
}
}
}
}