using AutoMapper; using Bit.Core.Repositories; using Bit.Infrastructure.EntityFramework.Models; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; namespace Bit.Infrastructure.EntityFramework.Repositories; public class TaxRateRepository : Repository<Core.Entities.TaxRate, TaxRate, string>, ITaxRateRepository { public TaxRateRepository(IServiceScopeFactory serviceScopeFactory, IMapper mapper) : base(serviceScopeFactory, mapper, (DatabaseContext context) => context.TaxRates) { } public async Task ArchiveAsync(Core.Entities.TaxRate model) { using (var scope = ServiceScopeFactory.CreateScope()) { var dbContext = GetDatabaseContext(scope); var entity = await dbContext.FindAsync<Core.Entities.TaxRate>(model); entity.Active = false; await dbContext.SaveChangesAsync(); } } public async Task<ICollection<Core.Entities.TaxRate>> GetAllActiveAsync() { using (var scope = ServiceScopeFactory.CreateScope()) { var dbContext = GetDatabaseContext(scope); var results = await dbContext.TaxRates .Where(t => t.Active) .ToListAsync(); return Mapper.Map<List<Core.Entities.TaxRate>>(results); } } public async Task<ICollection<Core.Entities.TaxRate>> GetByLocationAsync(Core.Entities.TaxRate taxRate) { using (var scope = ServiceScopeFactory.CreateScope()) { var dbContext = GetDatabaseContext(scope); var results = await dbContext.TaxRates .Where(t => t.Active && t.Country == taxRate.Country && t.PostalCode == taxRate.PostalCode) .ToListAsync(); return Mapper.Map<List<Core.Entities.TaxRate>>(results); } } public async Task<ICollection<Core.Entities.TaxRate>> SearchAsync(int skip, int count) { using (var scope = ServiceScopeFactory.CreateScope()) { var dbContext = GetDatabaseContext(scope); var results = await dbContext.TaxRates .Skip(skip) .Take(count) .Where(t => t.Active) .OrderBy(t => t.Country).ThenByDescending(t => t.PostalCode) .ToListAsync(); return Mapper.Map<List<Core.Entities.TaxRate>>(results); } } }