using AyCode.Utils.Extensions; using Microsoft.EntityFrameworkCore; using TIAM.Database.DbSets.Permissions; using TIAM.Database.DbSets.Products; using TIAM.Database.DbSets.Transfers; using TIAM.Database.DbSets.Users; using TIAM.Entities.Permissions; using TIAM.Entities.Products; using TIAM.Entities.ServiceProviders; using TIAM.Entities.Transfers; using TIAM.Entities.Users; namespace TIAM.Database.DbContexts.Admins { public static class AdminDbContextExtension { public static IQueryable GetUserProductMappingsByPermissionGroupId(this IAdminDbContext ctx, Guid permissionGroupId) { return ctx.UserProductMappings .Where(user => ctx.PermissionGroupUserMappings .Where(x => x.PermissionGroupId == permissionGroupId) .Select(x => x.SubjectId) .Contains(user.Id)); } public static void CleanUpAndRemoveUserProductMappings(this IAdminDbContext ctx, IEnumerable userProductMappings) { foreach (var userProductMapping in userProductMappings) { ctx.CleanUpAndRemoveAssignedUser(userProductMapping); } } public static void CleanUpAndRemoveAssignedUser(this IAdminDbContext ctx, UserProductMapping userProductMapping) { ctx.RemoveContextMappingBySubjectId(userProductMapping.Id); ctx.RemoveAssingedUserFromPermissionGroups(userProductMapping.Id); ctx.UserProductMappings.Remove(userProductMapping); } public static bool CleanUpAndRemoveUserProductMappings(this IAdminDbContext ctx, Guid userProductMappingId) { var userProductMapping = ctx.GetUserProductMappingById(userProductMappingId); if (userProductMapping == null) return false; ctx.CleanUpAndRemoveAssignedUser(userProductMapping); return true; } public static void DeleteProductById(this IAdminDbContext ctx, Guid productId) { var product = ctx.Products.FirstOrDefault(u => u.Id == productId); if (product == null) return; ctx.CleanUpAndRemoveUserProductMappings(ctx.GetUserProductMappingsByProductId(productId)); ctx.Products.Remove(product); } public static bool CreatePermissionGroup(this IAdminDbContext ctx, PermissionGroup permissionGroup) { if (permissionGroup == null) return false; ctx.PermissionGroups.Add(permissionGroup); return true; } public static bool CreatePermissionContextMapping(this IAdminDbContext ctx, PermissionContextMapping permissionContextMapping) { if (permissionContextMapping == null) return false; ctx.PermissionContextMappings.Add(permissionContextMapping); return true; } public static bool CreatePermissionGroupUserMapping(this IAdminDbContext ctx, PermissionGroupUserMapping permissionGroupUserMapping) { if (permissionGroupUserMapping == null) return false; ctx.PermissionGroupUserMappings.Add(permissionGroupUserMapping); return true; } public static bool CreatePermissionsType(this IAdminDbContext ctx, PermissionsType permissionType) { if (permissionType == null) return false; ctx.PermissionsTypes.Add(permissionType); return true; } public static bool CreateProduct(this IAdminDbContext ctx, Product myproduct) { if (myproduct == null) return false; //Automatically add assigneduser for owner Company? company = ctx.ServiceProviders.FirstOrDefault(x => x.Id == myproduct.ServiceProviderId); if (company == null || company.OwnerId.IsNullOrEmpty()) return false; var userProductMapping = new UserProductMapping(myproduct.Id, company.OwnerId.Value); ctx.CreateAssignedUser(userProductMapping); ctx.AddProduct(myproduct); return true; } public static bool CreateAssignedUser(this IAdminDbContext ctx, UserProductMapping userProductMapping) { if (userProductMapping == null) return false; ctx.UserProductMappings.Add(userProductMapping); return true; } public static Company CreateServiceProvider(this IAdminDbContext ctx, Company serviceProvider) { if (serviceProvider == null || serviceProvider.OwnerId.IsNullOrEmpty()) return null; ctx.ServiceProviders.Add(serviceProvider); var userProductMapping = new UserProductMapping(serviceProvider.Id, serviceProvider.OwnerId.Value); ctx.CreateAssignedUser(userProductMapping); return serviceProvider; } public static bool UpdateServiceProvider(this IAdminDbContext ctx, Company serviceProvider) => ctx.ServiceProviders.Update(serviceProvider).State == EntityState.Modified; } }