TourIAm/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDalExtension.cs

56 lines
2.0 KiB
C#

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<PermissionContextMapping> 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<AssignedUser> 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;
}
}