Add PermissionViewSql; refactoring, improvements, etc...
This commit is contained in:
parent
c896cf8a5c
commit
231119963e
|
|
@ -2,5 +2,7 @@
|
|||
|
||||
public enum ProductType : byte
|
||||
{
|
||||
|
||||
NotDefined = 0,
|
||||
Transfer = 5,
|
||||
Hotel = 10,
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ using AyCode.Database.DataLayers.Users;
|
|||
using TIAM.Database.DataLayers.ServiceProviders;
|
||||
using TIAM.Database.DataLayers.Users;
|
||||
using TIAM.Database.DbContexts.ServiceProviders;
|
||||
using TIAM.Database.DbSets.Permissions;
|
||||
|
||||
namespace TIAM.Database.Test
|
||||
{
|
||||
|
|
@ -24,15 +25,52 @@ namespace TIAM.Database.Test
|
|||
{ }
|
||||
|
||||
[TestMethod]
|
||||
[DataRow("540271F6-C604-4C16-8160-D5A7CAFEDF00")]
|
||||
public async Task GetPermissionContextMappingByContext_ReturnsPermissionContextMapping_WhenPermissionContextMappingExists(string contextIdString)
|
||||
[DataRow("42968456-6EF3-4D9C-8BC4-0569A129AC05")]
|
||||
public void GetPermissionViewBySubjectId_ReturnsPermissionContextMapping_WhenPermissionContextMappingExists(string subjectIdString)
|
||||
{
|
||||
var contextId = Guid.Parse(contextIdString);
|
||||
var subjectId= Guid.Parse(subjectIdString);
|
||||
|
||||
var permMapping = await Dal.GetPermissionContextMappingByContextIdAsync(contextId);
|
||||
//var permMapping = Dal.GetPermissionByContextId(contextId);
|
||||
var permMapping = Dal.GetPermissionContextsViewBySubjectId(subjectId).ToList();
|
||||
|
||||
Assert.IsNotNull(permMapping, "Result is null");
|
||||
Assert.IsTrue(permMapping.Count > 0, "Result count: 0");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
[DataRow("814b5495-c2e9-4f1d-a73f-37cd5d353078")]
|
||||
public void GetPermissionViewByContextId_ReturnsPermissionContextMapping_WhenPermissionContextMappingExists(string contextIdString)
|
||||
{
|
||||
var contextId = Guid.Parse(contextIdString);
|
||||
|
||||
//var permMapping = Dal.GetPermissionByContextId(contextId);
|
||||
var permMapping = Dal.GetPermissionContextsViewByContextId(contextId).ToList();
|
||||
|
||||
Assert.IsNotNull(permMapping, "Result is null");
|
||||
Assert.IsTrue(permMapping.Count > 0, "Result count: 0");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
[DataRow("814b5495-c2e9-4f1d-a73f-37cd5d353078")]
|
||||
public async Task GetPermissionContextMappingByContextIdAsync_ReturnsPermissionContextMapping_WhenPermissionContextMappingExists(string contextIdString)
|
||||
{
|
||||
var contextId = Guid.Parse(contextIdString);
|
||||
|
||||
var permMapping = await Dal.GetPermissionContextsViewByContextIdAsync(contextId);
|
||||
|
||||
Assert.IsNotNull(permMapping, "Result is null");
|
||||
Assert.IsTrue(permMapping.Count > 0, "Result count: 0");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
[DataRow("814B5495-C2E9-4F1D-A73F-37CD5D353078")]
|
||||
public void GetProductById_ReturnsProduct_WhenProductExists(string productIdString)
|
||||
{
|
||||
var productId = Guid.Parse(productIdString);
|
||||
|
||||
var product = Dal.GetProductById(productId);
|
||||
|
||||
Assert.IsNotNull(product, "Result is null");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ using TIAM.Database.DbContexts.ServiceProviders;
|
|||
using TIAM.Database.DbSets.Permissions;
|
||||
using TIAM.Database.DbSets.Users;
|
||||
using AyCode.Database.DataLayers;
|
||||
using TIAM.Database.DbSets.Products;
|
||||
|
||||
|
||||
namespace TIAM.Database.DataLayers.ServiceProviders
|
||||
|
|
@ -78,7 +79,7 @@ namespace TIAM.Database.DataLayers.ServiceProviders
|
|||
if (dbServiceProvider != null)
|
||||
{
|
||||
//get products for this provider
|
||||
var products = Context.Products.Where(x => x.OwnerId == id).ToList();
|
||||
var products = Context.Products.Where(x => x.ServiceProviderId == id).ToList();
|
||||
|
||||
/*foreach (var productItem in products)
|
||||
{
|
||||
|
|
@ -192,8 +193,17 @@ namespace TIAM.Database.DataLayers.ServiceProviders
|
|||
|
||||
#region PermissionMappings
|
||||
|
||||
public Task<List<PermissionContextMapping>> GetPermissionContextMappingByContextIdAsync(Guid contextId)
|
||||
=> SessionAsync(x => x.GetPermissionContextMappingByContextId(contextId).ToList());
|
||||
public List<PermissionContextMapping> GetPermissionContextsView(Guid subjectId, Guid contextId)
|
||||
=> Session(x => x.GetPermissionContextsView(subjectId, contextId).ToList());
|
||||
|
||||
public List<PermissionContextMapping> GetPermissionContextsViewBySubjectId(Guid contextId)
|
||||
=> Session(x => x.GetPermissionContextsViewBySubjectId(contextId).ToList());
|
||||
|
||||
public List<PermissionContextMapping> GetPermissionContextsViewByContextId(Guid contextId)
|
||||
=> Session(x => x.GetPermissionContextsViewByContextId(contextId).ToList());
|
||||
|
||||
public Task<List<PermissionContextMapping>> GetPermissionContextsViewByContextIdAsync(Guid contextId)
|
||||
=> SessionAsync(x => x.GetPermissionContextsViewByContextId(contextId).ToList());
|
||||
|
||||
//3. (IPermissionService) get permissions of assigned users and groups
|
||||
public Task<List<AssignedPermissionModel>> GetPermissionsOfUserProductMappingsAndGroupsAsyncByContextId(Guid contextId)
|
||||
|
|
@ -358,21 +368,24 @@ namespace TIAM.Database.DataLayers.ServiceProviders
|
|||
|
||||
#region Products
|
||||
|
||||
public Product? GetProductById(Guid contextId)
|
||||
=> Session(x => x.GetProductById(contextId));
|
||||
|
||||
//* 19. (IServiceProviderDataService) Create product
|
||||
public bool CreateProductAsync(TiamProduct product)
|
||||
public bool CreateProductAsync(Product product)
|
||||
{
|
||||
Context.CreateProduct(product);
|
||||
Console.WriteLine($"Saving product to db {product.Id}, {product.Name}, {product.OwnerId}");
|
||||
Console.WriteLine($"Saving product to db {product.Id}, {product.Name}, {product.ServiceProviderId}");
|
||||
var _result = Context.SaveChangesAsync();
|
||||
return _result.Result > 0;
|
||||
}
|
||||
|
||||
//* 20. (IServiceProviderDataService) Update product
|
||||
public TiamProduct UpdateProduct(TiamProduct product)
|
||||
public Product UpdateProduct(Product product)
|
||||
{
|
||||
|
||||
var prod = Context.UpdateProduct(product);
|
||||
Console.WriteLine($"Saving product to db {product.Id}, {product.Name}, {product.OwnerId}");
|
||||
Console.WriteLine($"Saving product to db {product.Id}, {product.Name}, {product.ServiceProviderId}");
|
||||
Context.SaveChanges();
|
||||
return prod;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,11 @@
|
|||
using AyCode.Database.DataLayers.Users;
|
||||
using AyCode.Models.Enums;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Diagnostics;
|
||||
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;
|
||||
|
|
@ -13,7 +16,7 @@ namespace TIAM.Database.DataLayers.ServiceProviders;
|
|||
|
||||
public static class ServiceProviderDalExtension
|
||||
{
|
||||
public static IQueryable<UserProductMapping> GetUserProductMappingsByPermissionGroupId(this ServiceProviderDbContext ctx, Guid permissionGroupId)
|
||||
public static IQueryable<UserProductMapping> GetUserProductMappingsByPermissionGroupId(this IServiceProviderDbContext ctx, Guid permissionGroupId)
|
||||
{
|
||||
return ctx.UserProductMappings
|
||||
.Where(user => ctx.PermissionGroupUserMappings
|
||||
|
|
@ -22,16 +25,6 @@ public static class ServiceProviderDalExtension
|
|||
.Contains(user.Id));
|
||||
}
|
||||
|
||||
public static IQueryable<PermissionContextMapping> GetPermissionContextMappingByContextId(this IServiceProviderDbContext ctx, Guid contextId)
|
||||
{
|
||||
var subjectIds = ctx.GetUserProductMappingsByProductId(contextId).Select(x => x.Id).
|
||||
Concat(ctx.PermissionGroups.Where(x => x.OwnerId == contextId).Select(x => x.Id)).ToHashSet();
|
||||
|
||||
return ctx.GetPermissionContextMappingsBySubjectIds(subjectIds);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static void CleanUpAndRemoveUserProductMappings(this IServiceProviderDbContext ctx, IEnumerable<UserProductMapping> userProductMappings)
|
||||
{
|
||||
foreach (var userProductMapping in userProductMappings)
|
||||
|
|
@ -81,20 +74,20 @@ public static class ServiceProviderDalExtension
|
|||
|
||||
}
|
||||
|
||||
public static bool CreateProduct(this IServiceProviderDbContext ctx, TiamProduct myproduct)
|
||||
public static bool CreateProduct(this IServiceProviderDbContext ctx, Product myproduct)
|
||||
{
|
||||
if (myproduct == null) return false;
|
||||
//Automatically add assigneduser for owner
|
||||
TiamServiceProvider? productOwner = ctx.ServiceProviders.FirstOrDefault(x => x.Id == myproduct.OwnerId);
|
||||
TiamServiceProvider? productOwner = ctx.ServiceProviders.FirstOrDefault(x => x.Id == myproduct.ServiceProviderId);
|
||||
if(productOwner == null) return false;
|
||||
var userProductMapping = new UserProductMapping(myproduct.Id, productOwner.OwnerId);
|
||||
ctx.CreateAssignedUser(userProductMapping);
|
||||
ctx.Products.Add(myproduct);
|
||||
ctx.AddProduct(myproduct);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static TiamProduct UpdateProduct(this IServiceProviderDbContext ctx, TiamProduct product)
|
||||
public static Product UpdateProduct(this IServiceProviderDbContext ctx, Product product)
|
||||
{
|
||||
if (product == null) return null;
|
||||
|
||||
|
|
@ -102,7 +95,7 @@ public static class ServiceProviderDalExtension
|
|||
if (existingProduct == null) return null;
|
||||
|
||||
existingProduct.Name = product.Name;
|
||||
existingProduct.OwnerId = product.OwnerId;
|
||||
existingProduct.ServiceProviderId = product.ServiceProviderId;
|
||||
existingProduct.Description = product.Description;
|
||||
existingProduct.Price = product.Price;
|
||||
existingProduct.JsonDetails = product.JsonDetails;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,6 @@ using TIAM.Database.DbSets.Users;
|
|||
|
||||
namespace TIAM.Database.DbContexts.ServiceProviders;
|
||||
|
||||
public interface IServiceProviderDbContext : IServiceProviderDbSet, ITiamProductDbSet, IAssignedUserDbSet, IPermissionsDbSetContext
|
||||
public interface IServiceProviderDbContext : IServiceProviderDbSet, IProductDbSet, IAssignedUserDbSet, IPermissionsDbSetContext
|
||||
{
|
||||
}
|
||||
|
|
@ -18,7 +18,7 @@ namespace TIAM.Database.DbContexts.ServiceProviders
|
|||
public class ServiceProviderDbContext : DbContextBase, IServiceProviderDbContext
|
||||
{
|
||||
public DbSet<TiamServiceProvider> ServiceProviders { get; set; }
|
||||
public DbSet<TiamProduct> Products { get; set; }
|
||||
public DbSet<Product> Products { get; set; }
|
||||
public DbSet<UserProductMapping> UserProductMappings { get; set; }
|
||||
|
||||
public DbSet<PermissionsType> PermissionsTypes { get; set; }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,11 @@
|
|||
using TIAM.Database.DbContexts.ServiceProviders;
|
||||
using AyCode.Database;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
||||
using TIAM.Database.DbContexts;
|
||||
using TIAM.Database.DbContexts.ServiceProviders;
|
||||
using TIAM.Database.DbSets.Users;
|
||||
using TIAM.Entities.Permissions;
|
||||
using TIAM.Entities.Products;
|
||||
|
||||
namespace TIAM.Database.DbSets.Permissions;
|
||||
|
||||
|
|
@ -22,6 +27,16 @@ public static class PermissionsDbSetExtensions
|
|||
// return ctx.GetPermissionContextMappingsBySubjectIds(subjectIds);
|
||||
//}
|
||||
|
||||
public static IQueryable<PermissionContextMapping> GetPermissionContextsViewBySubjectId(this IPermissionContextMappingDbSet ctx, Guid subjectId)
|
||||
=> ctx.PermissionContextMappings.FromSqlRaw(PermissionSqls.PermissionViewSql).Where(x => x.SubjectId == subjectId);
|
||||
|
||||
public static IQueryable<PermissionContextMapping> GetPermissionContextsViewByContextId(this IPermissionContextMappingDbSet ctx, Guid contextId)
|
||||
=> ctx.PermissionContextMappings.FromSqlRaw(PermissionSqls.PermissionViewSql).Where(x => x.ContextId == contextId);
|
||||
|
||||
public static IQueryable<PermissionContextMapping> GetPermissionContextsView(this IPermissionContextMappingDbSet ctx, Guid subjectId, Guid contextId)
|
||||
=> ctx.PermissionContextMappings.FromSqlRaw(PermissionSqls.PermissionViewSql).Where(x => x.SubjectId == subjectId && x.ContextId == contextId);
|
||||
|
||||
|
||||
public static IQueryable<PermissionContextMapping> GetPermissionContextMappingsBySubjectIds(this IPermissionsDbSetContext ctx, IEnumerable<Guid> subjectIds)
|
||||
=> ctx.PermissionContextMappings.Where(x => subjectIds.Contains(x.SubjectId));
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ using TIAM.Entities.Products;
|
|||
|
||||
namespace TIAM.Database.DbSets.Products;
|
||||
|
||||
public interface ITiamProductDbSet
|
||||
public interface IProductDbSet
|
||||
{
|
||||
public DbSet<TiamProduct> Products { get; }
|
||||
public DbSet<Product> Products { get; }
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
using Microsoft.EntityFrameworkCore;
|
||||
using TIAM.Entities.Products;
|
||||
|
||||
namespace TIAM.Database.DbSets.Products;
|
||||
|
||||
public static class ProductDbSetExtensins
|
||||
{
|
||||
#region Add, Update, Remove
|
||||
public static bool AddProduct(this IProductDbSet ctx, Product product)
|
||||
=> ctx.Products.Add(product).State == EntityState.Added;
|
||||
#endregion Add, Update, Remove
|
||||
|
||||
public static Product? GetProductById(this IProductDbSet ctx, Guid productId)
|
||||
=> ctx.Products.FirstOrDefault(x => x.Id == productId);
|
||||
}
|
||||
|
|
@ -17,7 +17,6 @@
|
|||
<Folder Include="DataLayers\Permissions\" />
|
||||
<Folder Include="DataLayers\Products\" />
|
||||
<Folder Include="DbSets\ServiceProvider\" />
|
||||
<Folder Include="DbSets\Products\" />
|
||||
<Folder Include="Extensions\" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -6,33 +6,16 @@ using TIAM.Core;
|
|||
|
||||
namespace TIAM.Entities.Products;
|
||||
|
||||
|
||||
public class Product : IEntityGuid, ITimeStampInfo
|
||||
[Table("Products")]
|
||||
public class Product : ProductBase
|
||||
{
|
||||
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
public Guid Id { get; set; }
|
||||
public Guid ServiceProviderId { get; set; }
|
||||
|
||||
public ProductType ProductType { get; set; }
|
||||
public Guid UserMediaId { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
public string Description { get; set; }
|
||||
public float Price { get; set; }
|
||||
public string JsonDetails { get; set; }
|
||||
public Product(){}
|
||||
|
||||
public DateTime Created { get; set; }
|
||||
public DateTime Modified { get; set; }
|
||||
|
||||
public Product(Guid id, ProductType type, Guid userMediaId, string name, string description, float price, string jsonDetails)
|
||||
public Product(Guid ownerId, ProductType productType, Guid userMediaId, string name, string description, float price, string jsonDetails) : this(Guid.NewGuid(), ownerId, productType, userMediaId, name, description, price, jsonDetails) { }
|
||||
public Product(Guid id, Guid serviceProviderId, ProductType productType, Guid userMediaId, string name, string description, float price, string jsonDetails) : base(id, productType, userMediaId, name, description, price, jsonDetails)
|
||||
{
|
||||
Id = id;
|
||||
ProductType = type;
|
||||
UserMediaId = userMediaId;
|
||||
Name = name;
|
||||
Description = description;
|
||||
Price = price;
|
||||
JsonDetails = jsonDetails;
|
||||
Created = DateTime.Now;
|
||||
Modified = DateTime.Now;
|
||||
ServiceProviderId = serviceProviderId;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using AyCode.Interfaces.Entities;
|
||||
using AyCode.Interfaces.TimeStampInfo;
|
||||
using TIAM.Core;
|
||||
|
||||
namespace TIAM.Entities.Products;
|
||||
|
||||
|
||||
public abstract class ProductBase : IEntityGuid, ITimeStampInfo
|
||||
{
|
||||
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public ProductType ProductType { get; set; }
|
||||
public Guid? UserMediaId { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
public string Description { get; set; }
|
||||
public float Price { get; set; }
|
||||
public string? JsonDetails { get; set; }
|
||||
|
||||
public DateTime Created { get; set; }
|
||||
public DateTime Modified { get; set; }
|
||||
|
||||
protected ProductBase(){}
|
||||
|
||||
protected ProductBase(Guid id, ProductType type, Guid userMediaId, string name, string description, float price, string jsonDetails)
|
||||
{
|
||||
Id = id;
|
||||
ProductType = type;
|
||||
UserMediaId = userMediaId;
|
||||
Name = name;
|
||||
Description = description;
|
||||
Price = price;
|
||||
JsonDetails = jsonDetails;
|
||||
Created = DateTime.Now;
|
||||
Modified = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using AyCode.Interfaces.Entities;
|
||||
using AyCode.Interfaces.TimeStampInfo;
|
||||
using TIAM.Core;
|
||||
|
||||
namespace TIAM.Entities.Products;
|
||||
|
||||
[Table("Products")]
|
||||
public class TiamProduct : Product
|
||||
{
|
||||
|
||||
public Guid OwnerId { get; set; }
|
||||
|
||||
public TiamProduct(Guid ownerId, ProductType productType, Guid userMediaId, string name, string description, float price, string jsonDetails) : this(Guid.NewGuid(), ownerId, productType, userMediaId, name, description, price, jsonDetails) { }
|
||||
public TiamProduct(Guid id, Guid ownerId, ProductType productType, Guid userMediaId, string name, string description, float price, string jsonDetails) : base(id, productType, userMediaId, name, description, price, jsonDetails)
|
||||
{
|
||||
OwnerId = ownerId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ using TIAM.Entities.Products;
|
|||
using TIAM.Entities.ServiceProviders;
|
||||
using TIAM.Entities.Users;
|
||||
using TIAMWebApp.Shared.Application.Models;
|
||||
using Product = TIAM.Entities.Products.Product;
|
||||
|
||||
namespace TIAMWebApp.Server.Controllers
|
||||
{
|
||||
|
|
@ -167,7 +168,7 @@ namespace TIAMWebApp.Server.Controllers
|
|||
[HttpPost]
|
||||
[Route("CreateProduct")]
|
||||
[Tags("In-Progress", "Product")]
|
||||
public async Task<IActionResult> CreateProduct([FromBody] TiamProduct product)
|
||||
public async Task<IActionResult> CreateProduct([FromBody] Product product)
|
||||
{
|
||||
Console.WriteLine("CreateProduct called");
|
||||
if (product == null)
|
||||
|
|
|
|||
Loading…
Reference in New Issue