using AyCode.Database.DataLayers.Users; using AyCode.Models.Enums; using TIAM.Database.DbContexts.ServiceProviders; using TIAM.Database.DbSets.Permissions; using TIAM.Database.DbSets.Users; using TIAM.Entities.Permissions; using TIAM.Entities.Users; namespace TIAM.Database.DataLayers.ServiceProviders; public static class ServiceProviderDalExtension { public static IQueryable GetPermissionContextMappingByContextId(this IServiceProviderDbContext ctx, Guid contextId) { var subjectIds = ctx.GetAssignedUsersByContextId(contextId).Select(x => x.Id). Concat(ctx.PermissionGroups.Where(x => x.ContextId == contextId).Select(x => x.Id)).ToHashSet(); return ctx.GetPermissionContextMappingsBySubjectIds(subjectIds); } public static void DeleteProductById(this IServiceProviderDbContext ctx, Guid productId) { var product = ctx.Products.FirstOrDefault(u => u.Id == productId); if (product == null) return; ctx.CleanUpAndRemoveAssignedUsers(ctx.GetAssignedUsersByContextId(productId)); ctx.Products.Remove(product); } public static void CleanUpAndRemoveAssignedUsers(this IServiceProviderDbContext ctx, IEnumerable assignedUsers) { foreach (var assignedUser in assignedUsers) { ctx.CleanUpAndRemoveAssignedUser(assignedUser); } } public static void CleanUpAndRemoveAssignedUser(this IServiceProviderDbContext ctx, AssignedUser assignedUser) { ctx.RemoveContextMappingBySubjectId(assignedUser.Id); ctx.RemoveAssingedUserFromPermissionGroups(assignedUser.Id); ctx.AssignedUsers.Remove(assignedUser); } public static bool CleanUpAndRemoveAssignedUsers(this IServiceProviderDbContext ctx, Guid assignedUserId) { var assignedUser = ctx.GetAssignedUserById(assignedUserId); if (assignedUser == null) return false; ctx.CleanUpAndRemoveAssignedUser(assignedUser); return true; } }