From 8651b52dae3ead657dd5ac1c7df3bea06b4b8b7f Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 20 Jan 2024 21:07:53 +0100 Subject: [PATCH] Products --- TIAM.Database.Test/AdminDalTest.cs | 19 ++++++++++ TIAM.Database/DataLayers/Admins/AdminDal.cs | 2 + TIAM.Entities/Products/Product.cs | 6 +++ .../Pages/User/SysAdmins/Products.razor | 5 ++- .../Pages/User/SysAdmins/Products.razor.cs | 19 +++++----- TIAMSharedUI/Shared/Users/AdminNavMenu.razor | 7 +++- .../Client/Properties/launchSettings.json | 38 +++++++++---------- .../ServiceProviderAPIController.cs | 34 ++++++++++++++++- .../Interfaces/IServiceProviderDataService.cs | 2 + TIAMWebApp/Shared/Models/APIUrls.cs | 3 ++ .../UI/WizardModels/ProductWizardModel.cs | 16 ++++++-- .../Services/ServiceProviderDataService.cs | 24 ++++++++++++ 12 files changed, 138 insertions(+), 37 deletions(-) diff --git a/TIAM.Database.Test/AdminDalTest.cs b/TIAM.Database.Test/AdminDalTest.cs index 5f173a6a..6ff29f61 100644 --- a/TIAM.Database.Test/AdminDalTest.cs +++ b/TIAM.Database.Test/AdminDalTest.cs @@ -80,6 +80,25 @@ namespace TIAM.Database.Test return product; } + [DataTestMethod] + public void GetProducts_ReturnProducts_WhenProductsExist() + { + var products = JsonConvert.DeserializeObject>(Dal.GetProducts()); + Assert.IsNotNull(products, "Products is null"); + Assert.IsTrue(products.Count() > 0, "No products found"); + + } + + [DataTestMethod] + [DataRow("3587F169-683C-4EEE-BCB5-E8D57F8C6DCE")] + public void GetProductsByServiceProviderId_ReturnProducts_WhenProductsExist(string serviceProviderId) + { + var products = JsonConvert.DeserializeObject>(Dal.GetProductsByServiceProviderId(Guid.Parse(serviceProviderId))); + Assert.IsNotNull(products, "Products is null"); + Assert.IsTrue(products.Count() > 0, "No products found"); + + } + [DataTestMethod] [DataRow("814b5495-c2e9-4f1d-a73f-37cd5d353078")] public void GeProductById_ReturnsProduct_WhenHasUserProductMappingRelation(string productIdString) diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index dd0e89ee..dca62665 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDal.cs +++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs @@ -49,6 +49,8 @@ namespace TIAM.Database.DataLayers.Admins public string GetUsersJson() => Session(ctx => ctx.Users.ToJson()); public Product? GetProductById(Guid contextId) => Session(ctx => ctx.GetProductById(contextId)); + public string GetProducts() => Session(ctx => ctx.Products.ToJson()); + public string GetProductsByServiceProviderId(Guid serviceProviderId) => Session(ctx => ctx.Products.Where(x => x.ServiceProviderId == serviceProviderId).ToJson()); public Task AddProduct(Product product) => TransactionAsync(ctx => ctx.AddProduct(product) && ctx.SaveChanges() > 0); public Task UpdateProduct(Product product) => TransactionAsync(ctx => ctx.UpdateProduct(product) && ctx.SaveChanges() > 0); diff --git a/TIAM.Entities/Products/Product.cs b/TIAM.Entities/Products/Product.cs index 5f8d50f3..11820039 100644 --- a/TIAM.Entities/Products/Product.cs +++ b/TIAM.Entities/Products/Product.cs @@ -23,7 +23,13 @@ public class Product : ProductBase public Product(Guid ownerId, ProductType productType, string name, string description, float price, string jsonDetails) : this(Guid.NewGuid(), ownerId, productType, name, description, price, jsonDetails) { } public Product(Guid id, Guid serviceProviderId, ProductType productType, string name, string description, float price, string jsonDetails) : base(id, productType, name, description, price, jsonDetails) + { + ServiceProviderId = serviceProviderId; + } + public Product(Guid ownerId, TiamServiceProvider serviceProvider, ProductType productType, string name, string description, float price, string jsonDetails) : this(Guid.NewGuid(), ownerId, serviceProvider, productType, name, description, price, jsonDetails) { } + public Product(Guid id, Guid serviceProviderId, TiamServiceProvider serviceProvider, ProductType productType, string name, string description, float price, string jsonDetails) : base(id, productType, name, description, price, jsonDetails) { ServiceProviderId = serviceProviderId; + ServiceProvider = serviceProvider; } } \ No newline at end of file diff --git a/TIAMSharedUI/Pages/User/SysAdmins/Products.razor b/TIAMSharedUI/Pages/User/SysAdmins/Products.razor index 3cb1c891..86a7fce6 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/Products.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/Products.razor @@ -1,4 +1,4 @@ -@page "/user/destinations" +@page "/user/products" @using AyCode.Models.Messages @using TIAM.Entities.ServiceProviders @using TIAM.Resources @@ -48,6 +48,7 @@ + @{ @@ -57,8 +58,8 @@ - + diff --git a/TIAMSharedUI/Pages/User/SysAdmins/Products.razor.cs b/TIAMSharedUI/Pages/User/SysAdmins/Products.razor.cs index 66f3d26e..7889da19 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/Products.razor.cs +++ b/TIAMSharedUI/Pages/User/SysAdmins/Products.razor.cs @@ -8,8 +8,9 @@ using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels; using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Interfaces; using Microsoft.AspNetCore.Components; -using TIAM.Entities.TransferDestinations; +using TIAM.Entities.ServiceProviders; using TIAM.Core.Enums; +using TIAMWebApp.Shared.Application.Services; namespace TIAMSharedUI.Pages.User.SysAdmins { @@ -25,14 +26,14 @@ namespace TIAMSharedUI.Pages.User.SysAdmins public MessageWizardModel messageWizardModel = new MessageWizardModel(); [Inject] - public ITransferDataService transferDataService { get; set; } + public IServiceProviderDataService serviceProviderDataService { get; set; } object? ProductArray = new ProductWizardModel[] { - new ProductWizardModel(ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, ""), - new ProductWizardModel(ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, ""), - new ProductWizardModel(ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, ""), + new ProductWizardModel(new TiamServiceProvider(), ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, ""), + new ProductWizardModel(new TiamServiceProvider(), ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, ""), + new ProductWizardModel(new TiamServiceProvider(), ProductType.Hotel, "XY hotel", "XYHotel description is here ", 10.0f, ""), }; object? TransferDataFromDb = new ProductWizardModel[] { }; @@ -146,13 +147,13 @@ namespace TIAMSharedUI.Pages.User.SysAdmins protected override async Task OnInitializedAsync() { base.OnInitialized(); - var a = await transferDataService.GetDestinationsAsync(); - logToBrowserConsole.LogToBC($"TransferDataFromDb: {((TransferDestinationWizardModel[])TransferDataFromDb).Length}"); + var a = await serviceProviderDataService.GetProductsForServiceProviderAsync(Guid.NewGuid()); + logToBrowserConsole.LogToBC($"ProductDataFromDb: {((ProductWizardModel[])TransferDataFromDb).Length}"); foreach (var item in a) { //add new transferwizardmodel to transferData array - TransferDataFromDb = ((TransferDestinationWizardModel[])TransferDataFromDb).Append( - new TransferDestinationWizardModel(Guid.NewGuid(), item.Name, item.Description, item.AddressString)); + TransferDataFromDb = ((ProductWizardModel[])TransferDataFromDb).Append( + new ProductWizardModel(item.ServiceProvider, item.ProductType, item.Name, item.Description, item.Price, item.JsonDetails)); logToBrowserConsole.LogToBC($"TransferDataFromDb: {item.Name}"); } } diff --git a/TIAMSharedUI/Shared/Users/AdminNavMenu.razor b/TIAMSharedUI/Shared/Users/AdminNavMenu.razor index 0ca1f2b1..00004a55 100644 --- a/TIAMSharedUI/Shared/Users/AdminNavMenu.razor +++ b/TIAMSharedUI/Shared/Users/AdminNavMenu.razor @@ -33,7 +33,12 @@ + diff --git a/TIAMWebApp/Client/Properties/launchSettings.json b/TIAMWebApp/Client/Properties/launchSettings.json index 76b85e86..76e15b95 100644 --- a/TIAMWebApp/Client/Properties/launchSettings.json +++ b/TIAMWebApp/Client/Properties/launchSettings.json @@ -1,40 +1,40 @@ { - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:28749", - "sslPort": 44368 - } - }, "profiles": { "http": { "commandName": "Project", - "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", - "applicationUrl": "http://localhost:5175", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" - } + }, + "dotnetRunMessages": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "http://localhost:5175" }, "https": { "commandName": "Project", - "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", - "applicationUrl": "https://localhost:7116;http://localhost:5175", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" - } + }, + "dotnetRunMessages": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:7116;http://localhost:5175" }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" - } + }, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}" + } + }, + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:60505/", + "sslPort": 44395 } } -} +} \ No newline at end of file diff --git a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs index 5ee8808c..320a29f0 100644 --- a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs +++ b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs @@ -7,6 +7,7 @@ using SkiaSharp; using SkiaSharp.Views.Desktop; using System.Drawing; using System.Drawing.Imaging; +using System.Net; using System.Text.Json; using TIAM.Database.DataLayers.Admins; //using TIAM.Database.DataLayers.ServiceProviders; @@ -124,8 +125,7 @@ namespace TIAMWebApp.Server.Controllers //22. [AllowAnonymous] [HttpPost] - [Route(APIUrls.CreateUserProductMappingRouteName)] - [Route("CreateUserProductMapping")] + [Route(APIUrls.CreateUserProductMappingRouteName)] [Tags("Finished", "ServiceProvider")] [EndpointSummary("Create assigned user to product")] public async Task CreateUserProductMapping(CreateUserProductMappingModel createUserProductMappingModel) @@ -212,5 +212,35 @@ namespace TIAMWebApp.Server.Controllers return Ok(sigBase64); } } + + [AllowAnonymous] + [HttpPost] + [Route(APIUrls.GetProductsByServiceProviderIdRouteName)] + [Tags("In-Progress", "Product")] + public IActionResult GetProductsByServiceProviderId(Guid serviceProviderId) + { + Console.WriteLine($"GetProductsByServiceProviderId called with serviceProviderId: {serviceProviderId}"); + + if (serviceProviderId == Guid.Empty) + { + return BadRequest("Invalid request"); + } + else + { + var products = _adminDal.GetProductsByServiceProviderId(serviceProviderId); + if (products != null) + { + return Ok(products); + } + else + { + //some Iactionresult that explains that there were errors + return StatusCode(500); + + } + + } + + } } } \ No newline at end of file diff --git a/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs b/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs index c247b7b1..7a0b7360 100644 --- a/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs +++ b/TIAMWebApp/Shared/Interfaces/IServiceProviderDataService.cs @@ -52,5 +52,7 @@ namespace TIAMWebApp.Shared.Application.Interfaces //25. (IServiceProviderDataService) Get QRCode by ProductId public Task GetQRCodeByProductIdAsync(Guid productId); + public Task> GetProductsForServiceProviderAsync(Guid serviceProviderId); + } } diff --git a/TIAMWebApp/Shared/Models/APIUrls.cs b/TIAMWebApp/Shared/Models/APIUrls.cs index d06edf41..1eb861d8 100644 --- a/TIAMWebApp/Shared/Models/APIUrls.cs +++ b/TIAMWebApp/Shared/Models/APIUrls.cs @@ -77,6 +77,9 @@ namespace TIAMWebApp.Shared.Application.Models public const string AddProductRouteName = "AddProduct"; public const string AddProductRouteUrl = ServiceProviderAPI + AddProductRouteName; + public const string GetProductsByServiceProviderIdRouteName = "GetProductsByServiceProviderId"; + public const string GetProductsByServiceProviderId = ServiceProviderAPI + GetProductsByServiceProviderIdRouteName; + public const string CreateUserProductMappingRouteName = "CreateUserProductMapping"; public const string CreateUserProductMapping = ServiceProviderAPI + CreateUserProductMappingRouteName; diff --git a/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/ProductWizardModel.cs b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/ProductWizardModel.cs index b4687dc8..b8286838 100644 --- a/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/ProductWizardModel.cs +++ b/TIAMWebApp/Shared/Models/ClientSide/UI/WizardModels/ProductWizardModel.cs @@ -5,6 +5,8 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using TIAM.Core.Enums; +using TIAM.Entities.Products; +using TIAM.Entities.ServiceProviders; using TIAM.Resources; namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels @@ -29,21 +31,27 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels public float Price { get; set; } public string? JsonDetails { get; set; } - public DateTime Created { get; set; } - public DateTime Modified { get; set; } + public TiamServiceProvider TiamServiceProvider { get; set; } public ProductWizardModel() { } - public ProductWizardModel(ProductType productType, string name, string description, float price, string? jsonDetails) : this(Guid.NewGuid(), productType, name, description, price, jsonDetails) { } + public ProductWizardModel(TiamServiceProvider tiamServiceProvider, ProductType productType, string name, string description, float price, string? jsonDetails) : this(Guid.NewGuid(), tiamServiceProvider, productType, name, description, price, jsonDetails) { } - public ProductWizardModel(Guid id, ProductType productType, string name, string description, float price, string? jsonDetails) + public ProductWizardModel(Guid id, TiamServiceProvider tiamServiceProvider, ProductType productType, string name, string description, float price, string? jsonDetails) { Id = id; + TiamServiceProvider = tiamServiceProvider; ProductType = productType; Name = name; Description = description; Price = price; JsonDetails = jsonDetails; } + + public Product SaveToProduct(TiamServiceProvider tiamServiceProvider) + { + Product NewProduct = new(this.Id, tiamServiceProvider.Id, tiamServiceProvider, this.ProductType, this.Name, this.Description, this.Price, this.JsonDetails); + return NewProduct; + } } } diff --git a/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs b/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs index dbc40afd..2e0a5ce1 100644 --- a/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs +++ b/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs @@ -1,5 +1,6 @@ using AyCode.Interfaces.StorageHandlers; using Microsoft.JSInterop; +using Newtonsoft.Json; using SkiaSharp; using System.Net.Http.Json; using TIAM.Database.DataLayers.Users; @@ -129,5 +130,28 @@ namespace TIAMWebApp.Shared.Application.Services return null; } } + + public async Task> GetProductsForServiceProviderAsync(Guid serviceProviderId) + { + var url = APIUrls.GetProductsByServiceProviderId; + var response = await http.PostAsJsonAsync(url, serviceProviderId); + if (response.IsSuccessStatusCode) + { + var result = await response.Content.ReadAsStringAsync(); + logToBrowserConsole.LogToBC("Json: " + result); + var data = JsonConvert.DeserializeObject>(result); + if (data != null) + { + return data; + } + else { + return null; + } + } + else + { + return null; + } + } } }