From b140458409f43b733951e1bb73a662038c2b5f67 Mon Sep 17 00:00:00 2001 From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN> Date: Mon, 3 Jun 2024 08:43:58 +0200 Subject: [PATCH] Implement CompanyDataChanging, CarDataChanging; improvements, fixes... --- TIAM.Services/SignalRTags.cs | 16 +- .../Controllers/MessageAPIController.cs | 3 +- .../ServiceProviderAPIController.cs | 235 +++++++++--------- .../Server/Services/DevAdminSignalRhub.cs | 7 - TIAMWebApp/Shared/Models/APIUrls.cs | 3 + 5 files changed, 125 insertions(+), 139 deletions(-) diff --git a/TIAM.Services/SignalRTags.cs b/TIAM.Services/SignalRTags.cs index 4892f025..d3e47a7c 100644 --- a/TIAM.Services/SignalRTags.cs +++ b/TIAM.Services/SignalRTags.cs @@ -38,16 +38,16 @@ public class SignalRTags : AcSignalRTags //public const int GetProfiles = 36; public const int GetProfilesByContextId = 37; public const int UpdateProfile = 38; + //public const int AddAddress = 39; //public const int RemoveAddress = 40; - public const int CreateUserProductMapping = 27; - public const int UpdateUserProductMapping = 28; - public const int DeleteUserProductMapping = 29; //set permissions to 0 + public const int CreateUserProductMapping = 47; + public const int UpdateUserProductMapping = 48; + public const int DeleteUserProductMapping = 49; //set permissions to 0 - public const int GetCarsForUserProductMapping = 30; - public const int CreateCar = 31; - public const int UpdateCar = 32; - public const int DeleteCar = 33; + public const int GetCarsForUserProductMapping = 50; + public const int CreateCar = 51; + public const int UpdateCar = 52; + public const int DeleteCar = 53; } -} \ No newline at end of file diff --git a/TIAMWebApp/Server/Controllers/MessageAPIController.cs b/TIAMWebApp/Server/Controllers/MessageAPIController.cs index af00deed..c7506c16 100644 --- a/TIAMWebApp/Server/Controllers/MessageAPIController.cs +++ b/TIAMWebApp/Server/Controllers/MessageAPIController.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; using System.Text.Json; +using AyCode.Core.Helpers; using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models.ClientSide.Messages; using AyCode.Models.Enums; @@ -53,7 +54,7 @@ namespace TIAMWebApp.Server.Controllers var result = await _messageSenderService.SendMessageAsync(messageElement, (int)message.MessageType); //_adminDal.AddEmailMessageAsync((TIAM.Entities.Emails.EmailMessage)SerializedMessageSenderModel.Message); messageElement.EmailAddress = "noreply@anataworld.com"; - _adminDal.AddEmailMessageAsync(messageElement).Forget(); + await _adminDal.AddEmailMessageAsync(messageElement); Console.WriteLine("SendEmail result: " + result); return Ok(result); diff --git a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs index 609cce54..8714a39e 100644 --- a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs +++ b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Mvc; using QRCoder; using System.Drawing; using System.Drawing.Imaging; +using AyCode.Core.Enums; using AyCode.Core.Extensions; using TIAM.Database.DataLayers.Admins; using TIAM.Entities.ServiceProviders; @@ -13,6 +14,8 @@ using TIAM.Entities.Addresses; using TIAM.Entities.Profiles; using AyCode.Core.Loggers; using AyCode.Services.SignalRs; +using AyCode.Utils.Extensions; +using TIAM.Entities.Drivers; using TIAM.Services; namespace TIAMWebApp.Server.Controllers @@ -24,79 +27,96 @@ namespace TIAMWebApp.Server.Controllers { private readonly TIAM.Core.Loggers.Logger _logger = new(logWriters.ToArray()); + [NonAction] + [ApiExplorerSettings(IgnoreApi = true)] + private async Task CompanyDataChanging(Company company, DataChangeMode dataChangeMode) + { + var logText = $"CompanyDataChanging {dataChangeMode} called; id: {company.Id}; ownerId: {company.OwnerId}; Name: {company.Name}"; + + if (company.Name.IsNullOrEmpty()) + { + _logger.Error(logText); + + return false; + } + + _logger.Info(logText); + + switch (dataChangeMode) + { + case DataChangeMode.Add: + if (company.Id.IsNullOrEmpty()) company.Id = Guid.NewGuid(); + + company.SetProfile(new Profile(Guid.NewGuid(), company.Name)); + company.Profile.SetAddress(new Address(Guid.NewGuid(), "Controller AddCompanyAsync; address text...")); + + return await adminDal.CreateServiceProviderAsync(company); + + case DataChangeMode.Update: + return await adminDal.UpdateCompanyAsync(company); + case DataChangeMode.Remove: + return await adminDal.RemoveCompanyAsync(company); + + default: + throw new ArgumentOutOfRangeException(nameof(dataChangeMode), dataChangeMode, null); + } + } + + [NonAction] + [ApiExplorerSettings(IgnoreApi = true)] + [SignalR(SignalRTags.AddCompany)] + public async Task AddCompanyAsync(Company company) + => await CompanyDataChanging(company, DataChangeMode.Add) ? company.ToJson() : string.Empty; + + [AllowAnonymous] + [HttpPost] + [Route(APIUrls.UpdateServiceProviderRouteName)] + [SignalR(SignalRTags.UpdateCompany)] + public async Task UpdateServiceProvider(Company company) + => await CompanyDataChanging(company, DataChangeMode.Update) ? company.ToJson() : string.Empty; + + [AllowAnonymous] + [HttpPost] + [Route(APIUrls.RemoveServiceProviderRouteName)] + [SignalR(SignalRTags.RemoveCompany)] + public async Task RemoveServiceProvider(Company company) + => await CompanyDataChanging(company, DataChangeMode.Remove) ? company.ToJson() : string.Empty; + //15. [AllowAnonymous] [HttpPost] [Route(APIUrls.CreateServiceProviderRouteName)] [Tags("In-Progress", "ServiceProvider")] [EndpointSummary("Create service provider")] - public async Task CreateServiceProvider([FromBody] ServiceProviderModel serializedServiceProviderModel) + public async Task CreateServiceProvider([FromBody] ServiceProviderModel? serializedServiceProviderModel) { _logger.Info(@"CreateServiceProvider called"); //if (serializedServiceProviderModel.GetArrayLength() == 0) if (serializedServiceProviderModel == null) { - return string.Empty;//BadRequest("SerializedLoginModel is required").ToJson(); + return string.Empty; //BadRequest("SerializedLoginModel is required").ToJson(); } - else + + //Company? serviceProvider = JObject.Parse(serializedServiceProviderModel.GetRawText()).ToObject(); + var serviceProvider = serializedServiceProviderModel; + + var id = Guid.NewGuid(); + var name = serviceProvider.Name; + var commissionRate = serviceProvider.CommissionPercent; + + //no owner set yet + var ownerId = serviceProvider.OwnerId == Guid.Empty ? null : serviceProvider.OwnerId; + //ownerId = Guid.Parse("540271F6-C604-4C16-8160-D5A7CAFEDF00"); //TESZT - J. + + if (name is null) return string.Empty; //BadRequest("Invalid request"); + + var company = new Company(id, name, ownerId, Guid.NewGuid()) { - - //Company? serviceProvider = JObject.Parse(serializedServiceProviderModel.GetRawText()).ToObject(); - var serviceProvider = serializedServiceProviderModel; - if (serviceProvider != null) - { - var id = Guid.NewGuid(); - var name = serviceProvider.Name; - var commissionRate = serviceProvider.CommissionPercent; + CommissionPercent = commissionRate + }; - - //no owner set yet - var ownerId = serviceProvider.OwnerId == Guid.Empty ? null : serviceProvider.OwnerId; - //ownerId = Guid.Parse("540271F6-C604-4C16-8160-D5A7CAFEDF00"); //TESZT - J. - - if (name is null) - { - return string.Empty;//BadRequest("Invalid request"); - } - else - { - var company = new Company(id, name, ownerId, Guid.NewGuid()) - { - CommissionPercent = commissionRate - }; - - return await AddCompanyAsync(company); - } - } - - else { - - return string.Empty;//BadRequest(); - - } - } - } - - [SignalR(SignalRTags.AddCompany)] - public async Task AddCompanyAsync(Company company) - { - if (company.Id.IsNullOrEmpty()) company.Id = Guid.NewGuid(); - - _logger.Info($@"ServiceProvider to be creating; id: {company.Id}, name: {company.Name}, ownerId: {company.OwnerId}"); - - company.SetProfile(new Profile(Guid.NewGuid(), company.Name)); - company.Profile.SetAddress(new Address(Guid.NewGuid(), "Controller AddCompanyAsync; address text...")); - - var result = await adminDal.CreateServiceProviderAsync(company); - if (!result) - { - return string.Empty;//BadRequest(result); - } - else - { - return company.ToJson();//Ok(toCreate); - } + return await AddCompanyAsync(company); } //16. @@ -109,17 +129,6 @@ namespace TIAMWebApp.Server.Controllers return await adminDal.GetServiceProvidersJsonAsync(); } - //[AllowAnonymous] - //[HttpGet] - //[Route(APIUrls.GetServiceProvidersRouteName)] - //public Task GetServiceProviders() => Task.FromResult(GetServiceProvidersMethod()); - - //[SignalR(SignalRTags.GetCompaniesAsync)] - //public string GetServiceProvidersMethod() - //{ - // return adminDal.GetServiceProvidersJson(); - //} - //18. [AllowAnonymous] [HttpPost] @@ -131,18 +140,6 @@ namespace TIAMWebApp.Server.Controllers return await adminDal.GetServiceProviderByIdAsync(id); } - [AllowAnonymous] - [HttpPost] - [Route(APIUrls.UpdateServiceProviderRouteName)] - [SignalR(SignalRTags.UpdateCompany)] - public async Task UpdateServiceProvider(Company companyToModify) - { - _logger.Info($"UpdateServiceProvider called! + {companyToModify.Id}"); - - var result = await adminDal.UpdateCompanyAsync(companyToModify); - - return result ? companyToModify.ToJson() : string.Empty; - } //17. [Authorize] @@ -243,6 +240,37 @@ namespace TIAMWebApp.Server.Controllers return cars; } + [NonAction] + [ApiExplorerSettings(IgnoreApi = true)] + private async Task CarDataChanging(Car car, DataChangeMode dataChangeMode) + { + var logText = $"CarDataChanging {dataChangeMode} called; id: {car.Id}; ownerId: {car.UserProductMappingId}; licensePlate: {car.LicencePlate}"; + + if (car.UserProductMappingId.IsNullOrEmpty() || car.LicencePlate.IsNullOrWhiteSpace()) + { + _logger.Error(logText); + + return false; + } + + _logger.Info(logText); + + switch (dataChangeMode) + { + case DataChangeMode.Add: + if (car.Id.IsNullOrEmpty()) car.Id = Guid.NewGuid(); + + return await adminDal.AddCarAsync(car); + case DataChangeMode.Update: + return await adminDal.UpdateCarAsync(car); + case DataChangeMode.Remove: + return await adminDal.RemoveCarAsync(car); + + default: + throw new ArgumentOutOfRangeException(nameof(dataChangeMode), dataChangeMode, null); + } + } + [AllowAnonymous] [HttpPost] [Route(APIUrls.CreateCarRouteName)] @@ -250,20 +278,7 @@ namespace TIAMWebApp.Server.Controllers [EndpointSummary("Create car")] [SignalR(SignalRTags.CreateCar)] public async Task CreateCar(Car car) - { - if (car.UserProductMappingId == Guid.Empty || car.LicencePlate == null) - { - return BadRequest("Invalid request"); - } - else - { - _logger.Info($@"CreateCar called with ownerId: {car.UserProductMappingId}, {car.LicencePlate}"); - - var result = await adminDal.AddCarAsync(car); - - return Ok(car); - } - } + => await CarDataChanging(car, DataChangeMode.Add) ? Ok(car) : BadRequest("Invalid request"); [AllowAnonymous] [HttpPost] @@ -272,20 +287,7 @@ namespace TIAMWebApp.Server.Controllers [EndpointSummary("Update car")] [SignalR(SignalRTags.UpdateCar)] public async Task UpdateCar(Car car) - { - if (car.UserProductMappingId == Guid.Empty || car.LicencePlate == null) - { - return BadRequest("Invalid request"); - } - else - { - _logger.Info($@"CreateCar called with ownerId: {car.UserProductMappingId}, {car.LicencePlate}"); - - var result = await adminDal.UpdateCarAsync(car); - - return Ok(car); - } - } + => await CarDataChanging(car, DataChangeMode.Update) ? Ok(car) : BadRequest("Invalid request"); [AllowAnonymous] [HttpPost] @@ -294,20 +296,7 @@ namespace TIAMWebApp.Server.Controllers [EndpointSummary("Delete car")] [SignalR(SignalRTags.DeleteCar)] public async Task DeleteCar(Car car) - { - if (car.UserProductMappingId == Guid.Empty || car.LicencePlate == null) - { - return BadRequest("Invalid request"); - } - else - { - _logger.Info($@"CreateCar called with ownerId: {car.UserProductMappingId}, {car.LicencePlate}"); - - var result = await adminDal.RemoveCarAsync(car); - - return Ok(car); - } - } + => await CarDataChanging(car, DataChangeMode.Remove) ? Ok(car) : BadRequest("Invalid request"); [HttpPost] [Route(APIUrls.AddProductRouteName)] diff --git a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs index 615c4272..be43655d 100644 --- a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs +++ b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs @@ -169,13 +169,6 @@ public class DevAdminSignalRHub : Hub, IAcSignalRHubServe address = await _adminDal.GetAddressByIdAsync(id); await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, new List
{ address! }), requestId); - return; - case SignalRTags.RemoveCompany: - var deleteCompany = message!.MessagePackTo>().PostData; - - await _adminDal.RemoveCompanyAsync(deleteCompany.Id); - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success), requestId); - return; case SignalRTags.UpdateAddress: diff --git a/TIAMWebApp/Shared/Models/APIUrls.cs b/TIAMWebApp/Shared/Models/APIUrls.cs index 0700ced5..f850dbc7 100644 --- a/TIAMWebApp/Shared/Models/APIUrls.cs +++ b/TIAMWebApp/Shared/Models/APIUrls.cs @@ -114,6 +114,9 @@ namespace TIAMWebApp.Shared.Application.Models public const string UpdateServiceProviderRouteName = "UpdateServiceProvider"; public const string UpdateServiceProviderUrl = ServiceProviderAPI + UpdateServiceProviderRouteName; + public const string RemoveServiceProviderRouteName = "RemoveServiceProvider"; + public const string RemoveServiceProviderUrl = ServiceProviderAPI + UpdateServiceProviderRouteName; + public const string GetQrCodeByProductIdRouteName = "GetQRCodeByProductId";