Files

68 lines
2.5 KiB
C#

using Distribution.Data;
using Microsoft.EntityFrameworkCore;
namespace Distribution.Features.Item;
public class ItemRepository(AppDBContext context) : IItemRepository
{
public async Task<Models.Item?> GetByIdAsync(Guid id) =>
await context.Items
.Include(i => i.Category)
.Include(i => i.SubCategory)
.Include(i => i.Brand)
.Include(i => i.BaseUom)
.Include(i => i.Conversions).ThenInclude(c => c.FromUom)
.Include(i => i.Conversions).ThenInclude(c => c.ToUom)
.FirstOrDefaultAsync(i => i.Id == id);
public async Task<Models.Item?> GetBySkuAsync(string sku) =>
await context.Items.FirstOrDefaultAsync(i => i.Sku == sku && i.IsActive);
public async Task<List<Models.Item>> GetAllAsync(Guid? categoryId = null, Guid? subCategoryId = null, Guid? brandId = null)
{
var query = context.Items
.Include(i => i.Category)
.Include(i => i.SubCategory)
.Include(i => i.Brand)
.Include(i => i.BaseUom)
.Where(i => i.IsActive);
if (categoryId.HasValue) query = query.Where(i => i.FK_CategoryId == categoryId);
if (subCategoryId.HasValue) query = query.Where(i => i.FK_SubCategoryId == subCategoryId);
if (brandId.HasValue) query = query.Where(i => i.FK_BrandId == brandId);
return await query.ToListAsync();
}
public async Task<bool> SkuExistsAsync(string sku, Guid? excludeId = null)
{
var query = context.Items.Where(i => i.Sku == sku);
if (excludeId.HasValue) query = query.Where(i => i.Id != excludeId);
return await query.AnyAsync();
}
public async Task<Models.Item?> GetByExternalErpItemIdAsync(int erpId) =>
await context.Items
.Include(i => i.Conversions)
.FirstOrDefaultAsync(i => i.ExternalErpItemId == erpId);
public async Task AddAsync(Models.Item entity) =>
await context.Items.AddAsync(entity);
public void Update(Models.Item entity) =>
context.Items.Update(entity);
public void Remove(Models.Item entity)
{
entity.IsActive = false;
context.Items.Update(entity);
}
public async Task ReplaceConversionsAsync(Guid itemId, List<Models.UomConversion> conversions)
{
var existing = await context.UomConversions.Where(c => c.FK_ItemId == itemId).ToListAsync();
context.UomConversions.RemoveRange(existing);
await context.UomConversions.AddRangeAsync(conversions);
}
}