using DigitalData.Core.Infrastructure; using DigitalData.UserManager.Domain.Entities; using DigitalData.UserManager.Infrastructure.Contracts; using Microsoft.EntityFrameworkCore; namespace DigitalData.UserManager.Infrastructure.Repositories { public class GroupRepository : CRUDRepository, IGroupRepository where TDbContext : DbContext, IUserManagerDbContext { private readonly IGroupOfUserRepository _gouRepo; private readonly IUserRepRepository _uRepRepo; public GroupRepository(TDbContext dbContext, IGroupOfUserRepository gouRepo, IUserRepRepository userRepRepository) : base(dbContext, dbContext.Groups) { _gouRepo = gouRepo; _uRepRepo = userRepRepository; } //TODO: instead of this implmenet .OnDelete(DeleteBehavior.ClientCascade) in DbContext public override async Task DeleteAsync(Group group) { var gou_list = await _gouRepo.ReadAsync(readOnly: false, groupId: group.Id); if (gou_list.Any()) _dbContext.RemoveRange(gou_list); var uRep_list = await _uRepRepo.ReadAllAsync(groupId: group.Id); if (uRep_list.Any()) _dbContext.RemoveRange(uRep_list); uRep_list = await _uRepRepo.ReadAllAsync(repGroupId: group.Id); if (uRep_list.Any()) _dbContext.RemoveRange(uRep_list); return await base.DeleteAsync(group); } } }