using AyCode.Database.DataLayers.Users; using AyCode.Interfaces.Entities; using AyCode.Models.Enums; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Newtonsoft.Json; using TIAM.Database.DbContexts; using TIAM.Database.DbContexts.ServiceProviders; using TIAM.Database.DbSets.Permissions; using TIAM.Database.DbSets.Products; using TIAM.Database.DbSets.Users; using TIAM.Entities.Permissions; using TIAM.Entities.Products; using TIAM.Entities.ServiceProviders; using TIAM.Entities.Users; //namespace TIAM.Database.DataLayers.ServiceProviders; //public static class ServiceProviderDalExtension //{ // //public static string ToJson(this T source) where T : class, IEntity // //{ // // JsonSerializerSettings options = new() // // { // // ReferenceLoopHandling = ReferenceLoopHandling.Ignore, // // NullValueHandling = NullValueHandling.Ignore // // }; // // return JsonConvert.SerializeObject(source, options); // //} // //public static string ToJson(this IQueryable source) where T : class, IEntity // //{ // // JsonSerializerSettings options = new() // // { // // ReferenceLoopHandling = ReferenceLoopHandling.Ignore, // // NullValueHandling = NullValueHandling.Ignore // // }; // // return JsonConvert.SerializeObject(source, options); // //} // //public static IQueryable GetUserProductMappingsByPermissionGroupId(this IServiceProviderDbContext 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 IServiceProviderDbContext ctx, IEnumerable userProductMappings) // //{ // // foreach (var userProductMapping in userProductMappings) // // { // // ctx.CleanUpAndRemoveAssignedUser(userProductMapping); // // } // //} // //public static void CleanUpAndRemoveAssignedUser(this IServiceProviderDbContext ctx, UserProductMapping userProductMapping) // //{ // // ctx.RemoveContextMappingBySubjectId(userProductMapping.Id); // // ctx.RemoveAssingedUserFromPermissionGroups(userProductMapping.Id); // // ctx.UserProductMappings.Remove(userProductMapping); // //} // //public static bool CleanUpAndRemoveUserProductMappings(this IServiceProviderDbContext ctx, Guid userProductMappingId) // //{ // // var userProductMapping = ctx.GetUserProductMappingById(userProductMappingId); // // if (userProductMapping == null) return false; // // ctx.CleanUpAndRemoveAssignedUser(userProductMapping); // // return true; // //} // //public static UserProductMapping UpdateUserProductMapping(this IServiceProviderDbContext context, UserProductMapping userProductMapping) // //{ // // if(userProductMapping == null) return null; // // var existingUserProductMapping = context.UserProductMappings.FirstOrDefault(u => u.Id == userProductMapping.Id); // // if (existingUserProductMapping == null) return null; // // existingUserProductMapping.Id = userProductMapping.Id; // // existingUserProductMapping.UserId = userProductMapping.UserId; // // existingUserProductMapping.ProductId = userProductMapping.ProductId; // // return existingUserProductMapping; // //} // //public static Product UpdateProduct(this IServiceProviderDbContext ctx, Product product) // //{ // // if (product == null) return null; // // var existingProduct = ctx.Products.FirstOrDefault(u => u.Id == product.Id); // // if (existingProduct == null) return null; // // existingProduct.Name = product.Name; // // existingProduct.ServiceProviderId = product.ServiceProviderId; // // existingProduct.Description = product.Description; // // existingProduct.Price = product.Price; // // existingProduct.JsonDetails = product.JsonDetails; // // //existingProduct.UserMediaId = product.UserMediaId; // // existingProduct.ProductType = product.ProductType; // // return existingProduct; // //} // //public static void DeleteProductById(this IServiceProviderDbContext 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 IServiceProviderDbContext ctx, PermissionGroup permissionGroup) // //{ // // if (permissionGroup == null) return false; // // ctx.PermissionGroups.Add(permissionGroup); // // return true; // //} // //public static bool CreatePermissionContextMapping(this IServiceProviderDbContext ctx, PermissionContextMapping permissionContextMapping) // //{ // // if (permissionContextMapping == null) return false; // // ctx.PermissionContextMappings.Add(permissionContextMapping); // // return true; // //} // //public static bool CreatePermissionGroupUserMapping(this IServiceProviderDbContext ctx, PermissionGroupUserMapping permissionGroupUserMapping) // //{ // // if (permissionGroupUserMapping == null) return false; // // ctx.PermissionGroupUserMappings.Add(permissionGroupUserMapping); // // return true; // //} // //public static bool CreatePermissionsType(this IServiceProviderDbContext ctx, PermissionsType permissionType) // //{ // // if (permissionType == null) return false; // // ctx.PermissionsTypes.Add(permissionType); // // return true; // //} //}