diff --git a/TIAM.Core/ProductType.cs b/TIAM.Core/ProductType.cs index 8e236f09..b37f1a3c 100644 --- a/TIAM.Core/ProductType.cs +++ b/TIAM.Core/ProductType.cs @@ -2,5 +2,7 @@ public enum ProductType : byte { - + NotDefined = 0, + Transfer = 5, + Hotel = 10, } \ No newline at end of file diff --git a/TIAM.Database.Test/ServiceProviderDalTest.cs b/TIAM.Database.Test/ServiceProviderDalTest.cs index 955c301d..66027e3a 100644 --- a/TIAM.Database.Test/ServiceProviderDalTest.cs +++ b/TIAM.Database.Test/ServiceProviderDalTest.cs @@ -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"); + } } } diff --git a/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs b/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs index 11ea9b8d..71102dd6 100644 --- a/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs +++ b/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDal.cs @@ -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> GetPermissionContextMappingByContextIdAsync(Guid contextId) - => SessionAsync(x => x.GetPermissionContextMappingByContextId(contextId).ToList()); + public List GetPermissionContextsView(Guid subjectId, Guid contextId) + => Session(x => x.GetPermissionContextsView(subjectId, contextId).ToList()); + + public List GetPermissionContextsViewBySubjectId(Guid contextId) + => Session(x => x.GetPermissionContextsViewBySubjectId(contextId).ToList()); + + public List GetPermissionContextsViewByContextId(Guid contextId) + => Session(x => x.GetPermissionContextsViewByContextId(contextId).ToList()); + + public Task> GetPermissionContextsViewByContextIdAsync(Guid contextId) + => SessionAsync(x => x.GetPermissionContextsViewByContextId(contextId).ToList()); //3. (IPermissionService) get permissions of assigned users and groups public Task> 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; } diff --git a/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDalExtension.cs b/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDalExtension.cs index 98b9b40c..cb7a9192 100644 --- a/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDalExtension.cs +++ b/TIAM.Database/DataLayers/ServiceProviders/ServiceProviderDalExtension.cs @@ -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 GetUserProductMappingsByPermissionGroupId(this ServiceProviderDbContext ctx, Guid permissionGroupId) + public static IQueryable 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 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 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; diff --git a/TIAM.Database/DbContexts/ServiceProviders/IServiceProviderDbContext.cs b/TIAM.Database/DbContexts/ServiceProviders/IServiceProviderDbContext.cs index 16b55fba..6c55df33 100644 --- a/TIAM.Database/DbContexts/ServiceProviders/IServiceProviderDbContext.cs +++ b/TIAM.Database/DbContexts/ServiceProviders/IServiceProviderDbContext.cs @@ -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 { } \ No newline at end of file diff --git a/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs b/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs index c987a84a..c3bb023e 100644 --- a/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs +++ b/TIAM.Database/DbContexts/ServiceProviders/ServiceProviderDbContext.cs @@ -18,7 +18,7 @@ namespace TIAM.Database.DbContexts.ServiceProviders public class ServiceProviderDbContext : DbContextBase, IServiceProviderDbContext { public DbSet ServiceProviders { get; set; } - public DbSet Products { get; set; } + public DbSet Products { get; set; } public DbSet UserProductMappings { get; set; } public DbSet PermissionsTypes { get; set; } diff --git a/TIAM.Database/DbSets/Permissions/PermissionsDbSetExtensions.cs b/TIAM.Database/DbSets/Permissions/PermissionsDbSetExtensions.cs index 13f3b7b1..e3543f2b 100644 --- a/TIAM.Database/DbSets/Permissions/PermissionsDbSetExtensions.cs +++ b/TIAM.Database/DbSets/Permissions/PermissionsDbSetExtensions.cs @@ -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 GetPermissionContextsViewBySubjectId(this IPermissionContextMappingDbSet ctx, Guid subjectId) + => ctx.PermissionContextMappings.FromSqlRaw(PermissionSqls.PermissionViewSql).Where(x => x.SubjectId == subjectId); + + public static IQueryable GetPermissionContextsViewByContextId(this IPermissionContextMappingDbSet ctx, Guid contextId) + => ctx.PermissionContextMappings.FromSqlRaw(PermissionSqls.PermissionViewSql).Where(x => x.ContextId == contextId); + + public static IQueryable GetPermissionContextsView(this IPermissionContextMappingDbSet ctx, Guid subjectId, Guid contextId) + => ctx.PermissionContextMappings.FromSqlRaw(PermissionSqls.PermissionViewSql).Where(x => x.SubjectId == subjectId && x.ContextId == contextId); + + public static IQueryable GetPermissionContextMappingsBySubjectIds(this IPermissionsDbSetContext ctx, IEnumerable subjectIds) => ctx.PermissionContextMappings.Where(x => subjectIds.Contains(x.SubjectId)); diff --git a/TIAM.Database/DbSets/Products/ITiamProductDbSet.cs b/TIAM.Database/DbSets/Products/IProductDbSet.cs similarity index 58% rename from TIAM.Database/DbSets/Products/ITiamProductDbSet.cs rename to TIAM.Database/DbSets/Products/IProductDbSet.cs index f419e959..457b5da3 100644 --- a/TIAM.Database/DbSets/Products/ITiamProductDbSet.cs +++ b/TIAM.Database/DbSets/Products/IProductDbSet.cs @@ -3,7 +3,7 @@ using TIAM.Entities.Products; namespace TIAM.Database.DbSets.Products; -public interface ITiamProductDbSet +public interface IProductDbSet { - public DbSet Products { get; } + public DbSet Products { get; } } \ No newline at end of file diff --git a/TIAM.Database/DbSets/Products/ProductDbSetExtensins.cs b/TIAM.Database/DbSets/Products/ProductDbSetExtensins.cs new file mode 100644 index 00000000..edcb1a8f --- /dev/null +++ b/TIAM.Database/DbSets/Products/ProductDbSetExtensins.cs @@ -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); +} \ No newline at end of file diff --git a/TIAM.Database/TIAM.Database.csproj b/TIAM.Database/TIAM.Database.csproj index e6a38233..3bac11a1 100644 --- a/TIAM.Database/TIAM.Database.csproj +++ b/TIAM.Database/TIAM.Database.csproj @@ -17,7 +17,6 @@ - diff --git a/TIAM.Entities/Products/Product.cs b/TIAM.Entities/Products/Product.cs index c1f81f2b..ee23814c 100644 --- a/TIAM.Entities/Products/Product.cs +++ b/TIAM.Entities/Products/Product.cs @@ -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; } } \ No newline at end of file diff --git a/TIAM.Entities/Products/ProductBase.cs b/TIAM.Entities/Products/ProductBase.cs new file mode 100644 index 00000000..3457dcc0 --- /dev/null +++ b/TIAM.Entities/Products/ProductBase.cs @@ -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; + } +} \ No newline at end of file diff --git a/TIAM.Entities/Products/TiamProduct.cs b/TIAM.Entities/Products/TiamProduct.cs deleted file mode 100644 index d781cf3b..00000000 --- a/TIAM.Entities/Products/TiamProduct.cs +++ /dev/null @@ -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; - } - - - - -} \ No newline at end of file diff --git a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs index 4d21031a..dfe0cc3e 100644 --- a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs +++ b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs @@ -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 CreateProduct([FromBody] TiamProduct product) + public async Task CreateProduct([FromBody] Product product) { Console.WriteLine("CreateProduct called"); if (product == null)