Files
PIbd-24_Ivleev_D.A._TwoFrom…/TwoFromTheCaseProject/TwoFromTheCaseDatabase/Implementations/SalaryStorageContract.cs
2025-03-13 11:05:34 +04:00

58 lines
1.7 KiB
C#

using AutoMapper;
using TwoFromTheCaseContracts.DataModels;
using TwoFromTheCaseContracts.Exceptions;
using TwoFromTheCaseContracts.StoragesContracts;
using TwoFromTheCaseDatabase.Models;
namespace TwoFromTheCaseDatabase.Implementations;
class SalaryStorageContract : ISalaryStorageContract
{
private readonly TwoFromTheCaseDbContext _dbContext;
private readonly Mapper _mapper;
public SalaryStorageContract(TwoFromTheCaseDbContext dbContext)
{
_dbContext = dbContext;
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Salary, SalaryDataModel>();
cfg.CreateMap<SalaryDataModel, Salary>()
.ForMember(dest => dest.WorkerSalary, opt => opt.MapFrom(src => src.Salary));
});
_mapper = new Mapper(config);
}
public List<SalaryDataModel> GetList(DateTime startDate, DateTime endDate, string? workerId = null)
{
try
{
var query = _dbContext.Salaries.Where(x => x.SalaryDate >= startDate && x.SalaryDate <= endDate);
if (workerId is not null)
{
query = query.Where(x => x.WorkerId == workerId);
}
return [.. query.Select(x => _mapper.Map<SalaryDataModel>(x))];
}
catch (Exception ex)
{
_dbContext.ChangeTracker.Clear();
throw new StorageException(ex);
}
}
public void AddElement(SalaryDataModel salaryDataModel)
{
try
{
_dbContext.Salaries.Add(_mapper.Map<Salary>(salaryDataModel));
_dbContext.SaveChanges();
}
catch (Exception ex)
{
_dbContext.ChangeTracker.Clear();
throw new StorageException(ex);
}
}
}