using Distribution.Data; using Microsoft.EntityFrameworkCore; namespace Distribution.Features.Scheme; public class SchemeRepository(AppDBContext context) : ISchemeRepository { public async Task GetByIdAsync(Guid id) => await context.Schemes .Include(s => s.Region) .Include(s => s.TriggerItem) .Include(s => s.FreeItem) .Include(s => s.BundleComponents).ThenInclude(c => c.Item) .FirstOrDefaultAsync(s => s.Id == id); public async Task> GetAllAsync(Guid? regionId = null) { var query = context.Schemes .Include(s => s.Region) .Include(s => s.TriggerItem) .Include(s => s.FreeItem) .Include(s => s.BundleComponents).ThenInclude(c => c.Item) .AsQueryable(); if (regionId.HasValue) query = query.Where(s => s.FK_RegionId == regionId); return await query.ToListAsync(); } public async Task AddAsync(Models.Scheme entity) => await context.Schemes.AddAsync(entity); public void Update(Models.Scheme entity) => context.Schemes.Update(entity); public void Remove(Models.Scheme entity) { entity.IsActive = false; context.Schemes.Update(entity); } public async Task> GetRedemptionsAsync(Guid schemeId) => await context.SchemeRedemptions .Include(r => r.FreeItem) .Include(r => r.ShopPO) .Where(r => r.FK_SchemeId == schemeId) .ToListAsync(); public async Task AddRedemptionAsync(Models.SchemeRedemption entity) => await context.SchemeRedemptions.AddAsync(entity); public async Task HasRedemptionAsync(Guid schemeId, Guid shopPOId) => await context.SchemeRedemptions.AnyAsync(r => r.FK_SchemeId == schemeId && r.FK_ShopPOId == shopPOId); public async Task GetBundleComponentAsync(Guid schemeId, Guid itemId) => await context.SchemeBundleComponents .FirstOrDefaultAsync(c => c.FK_SchemeId == schemeId && c.FK_ItemId == itemId); public async Task AddBundleComponentAsync(Models.SchemeBundleComponent entity) => await context.SchemeBundleComponents.AddAsync(entity); public void UpdateBundleComponent(Models.SchemeBundleComponent entity) => context.SchemeBundleComponents.Update(entity); public void RemoveBundleComponent(Models.SchemeBundleComponent entity) => context.SchemeBundleComponents.Remove(entity); }