diff --git a/EstateManagement/Bootstrapper/MiddlewareRegistry.cs b/EstateManagement/Bootstrapper/MiddlewareRegistry.cs index 1b8a95f..e6c9692 100644 --- a/EstateManagement/Bootstrapper/MiddlewareRegistry.cs +++ b/EstateManagement/Bootstrapper/MiddlewareRegistry.cs @@ -113,7 +113,7 @@ public MiddlewareRegistry(){ this.AddControllers(options => { // Add filter for all controllers. - options.Filters.Add(); + //options.Filters.Add(); }).AddNewtonsoftJson(options => { options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; diff --git a/EstateManagement/Controllers/ContractController.cs b/EstateManagement/Controllers/ContractController.cs index 5b2f833..0485397 100644 --- a/EstateManagement/Controllers/ContractController.cs +++ b/EstateManagement/Controllers/ContractController.cs @@ -80,7 +80,7 @@ public async Task GetContract([FromRoute] Guid estateId, [FromRoute] Guid contractId, CancellationToken cancellationToken) { this.V2ContractController.SetContextOverride(this.HttpContext); - ActionResult> result = await this.V2ContractController.GetContract(estateId, contractId, cancellationToken); + var result = await this.V2ContractController.GetContract(estateId, contractId, cancellationToken); return ActionResultHelpers.HandleResult(result, $"Contract not found with estate Id {estateId} and contract Id {contractId}"); } @@ -99,7 +99,7 @@ public async Task GetContracts([FromRoute] Guid estateId, CancellationToken cancellationToken) { this.V2ContractController.SetContextOverride(this.HttpContext); - ActionResult>> result = await this.V2ContractController.GetContracts(estateId, cancellationToken); + var result = await this.V2ContractController.GetContracts(estateId, cancellationToken); return ActionResultHelpers.HandleResult(result, String.Empty); @@ -123,7 +123,7 @@ public async Task AddProductToContract([FromRoute] Guid estateId, CancellationToken cancellationToken) { this.V2ContractController.SetContextOverride(this.HttpContext); - ActionResult result = await this.V2ContractController.AddProductToContract(estateId, contractId, addProductToContractRequest, cancellationToken); + var result = await this.V2ContractController.AddProductToContract(estateId, contractId, addProductToContractRequest, cancellationToken); return ActionResultHelpers.HandleResult(result, String.Empty); } @@ -148,7 +148,7 @@ public async Task AddTransactionFeeForProductToContract([FromRout CancellationToken cancellationToken) { this.V2ContractController.SetContextOverride(this.HttpContext); - ActionResult result = await this.V2ContractController.AddTransactionFeeForProductToContract( + var result = await this.V2ContractController.AddTransactionFeeForProductToContract( estateId, contractId, productId, addTransactionFeeForProductToContractRequest, cancellationToken); return ActionResultHelpers.HandleResult(result, String.Empty); @@ -172,7 +172,7 @@ public async Task DisableTransactionFeeForProduct([FromRoute] Gui CancellationToken cancellationToken) { this.V2ContractController.SetContextOverride(this.HttpContext); - ActionResult result = await this.V2ContractController.DisableTransactionFeeForProduct(estateId, contractId, productId, transactionFeeId, cancellationToken); + var result = await this.V2ContractController.DisableTransactionFeeForProduct(estateId, contractId, productId, transactionFeeId, cancellationToken); return ActionResultHelpers.HandleResult(result, String.Empty); } @@ -192,7 +192,7 @@ public async Task CreateContract([FromRoute] Guid estateId, CancellationToken cancellationToken) { this.V2ContractController.SetContextOverride(this.HttpContext); - ActionResult result = await this.V2ContractController.CreateContract(estateId, createContractRequest, cancellationToken); + var result = await this.V2ContractController.CreateContract(estateId, createContractRequest, cancellationToken); return ActionResultHelpers.HandleResult(result, String.Empty); } @@ -215,45 +215,66 @@ public async Task CreateContract([FromRoute] Guid estateId, } public static class ActionResultHelpers{ - public static IActionResult HandleResult(ActionResult> result, String notFoundMessage) - { - if (result.Result.IsSuccess()) - { - OkObjectResult ok = result.Result as OkObjectResult; - Result x = ok.Value as Result; + //public static IActionResult HandleResult(ActionResult> result, String notFoundMessage) + //{ + // if (result.Result.IsSuccess()) + // { + // OkObjectResult ok = result.Result as OkObjectResult; + // Result x = ok.Value as Result; - return new OkObjectResult(x.Data); - } + // return new OkObjectResult(x.Data); + // } - if (result.Result is NotFoundObjectResult) - { - throw new NotFoundException(notFoundMessage); - } + // if (result.Result is NotFoundObjectResult) + // { + // throw new NotFoundException(notFoundMessage); + // } - ObjectResult r = result.Result as ObjectResult; - if (r.StatusCode == 403) - return new ForbidResult(); + // ObjectResult r = result.Result as ObjectResult; + // if (r.StatusCode == 403) + // return new ForbidResult(); - return new BadRequestResult(); - } + // return new BadRequestResult(); + //} - public static IActionResult HandleResult(ActionResult result, String notFoundMessage) - { - if (result.Result.IsSuccess()) - { - return new OkResult(); - } + public static IActionResult HandleResult(IActionResult result, String notFoundMessage) { - if (result.Result is NotFoundObjectResult) - { - throw new NotFoundException(notFoundMessage); - } + if (result.GetType().Name == nameof(OkObjectResult)) { + OkObjectResult ok = result as OkObjectResult; + Type type = ok.Value.GetType(); + dynamic convertedObj = Convert.ChangeType(ok.Value, ok.Value.GetType()); - ObjectResult r = result.Result as ObjectResult; - if (r.StatusCode == 403) - return new ForbidResult(); + //Result x = ok.Value as Result; + return new OkObjectResult(convertedObj.Data); + } - return new BadRequestResult(); + IActionResult x = result.GetType().Name switch { + nameof(BadRequestObjectResult) => new BadRequestResult(), + nameof(NotFoundObjectResult) => throw new NotFoundException(notFoundMessage), + nameof(UnauthorizedObjectResult) => new UnauthorizedResult(), + nameof(ConflictObjectResult) => new ConflictResult(), + nameof(ForbidResult) => new ForbidResult(), + //nameof(OkObjectResult) => new OkObjectResult(result.) + _ => result + }; + return x; + + + //if (result.Result.IsSuccess()) + //{ + // return new OkResult(); + //} + + //if (result.Result is NotFoundObjectResult) + //{ + // throw new NotFoundException(notFoundMessage); + //} + + //ObjectResult r = result.Result as ObjectResult; + //if (r.StatusCode == 403) + // return new ForbidResult(); + + //return new BadRequestResult(); } } } \ No newline at end of file diff --git a/EstateManagement/Controllers/EstateController.cs b/EstateManagement/Controllers/EstateController.cs index ad62651..33b97b5 100644 --- a/EstateManagement/Controllers/EstateController.cs +++ b/EstateManagement/Controllers/EstateController.cs @@ -66,7 +66,7 @@ public async Task CreateEstate([FromBody] CreateEstateRequest cre CancellationToken cancellationToken) { this.V2EstateController.SetContextOverride(this.HttpContext); - ActionResult result = await this.V2EstateController.CreateEstate(createEstateRequest, cancellationToken); + var result = await this.V2EstateController.CreateEstate(createEstateRequest, cancellationToken); return ActionResultHelpers.HandleResult(result, String.Empty); } @@ -85,7 +85,7 @@ public async Task GetEstate([FromRoute] Guid estateId, CancellationToken cancellationToken) { this.V2EstateController.SetContextOverride(this.HttpContext); - ActionResult> result = await this.V2EstateController.GetEstate(estateId, cancellationToken); + var result = await this.V2EstateController.GetEstate(estateId, cancellationToken); return ActionResultHelpers.HandleResult(result, String.Empty); } @@ -97,7 +97,7 @@ public async Task GetEstates([FromRoute] Guid estateId, CancellationToken cancellationToken) { this.V2EstateController.SetContextOverride(this.HttpContext); - ActionResult>> result = await this.V2EstateController.GetEstates(estateId, cancellationToken); + var result = await this.V2EstateController.GetEstates(estateId, cancellationToken); return ActionResultHelpers.HandleResult(result, String.Empty); } @@ -116,7 +116,7 @@ public async Task CreateEstateUser([FromRoute] Guid estateId, CancellationToken cancellationToken) { this.V2EstateController.SetContextOverride(this.HttpContext); - ActionResult result = await this.V2EstateController.CreateEstateUser(estateId, createEstateUserRequest, cancellationToken); + var result = await this.V2EstateController.CreateEstateUser(estateId, createEstateUserRequest, cancellationToken); return ActionResultHelpers.HandleResult(result, String.Empty); } @@ -125,7 +125,7 @@ public async Task CreateEstateUser([FromRoute] Guid estateId, public async Task AssignOperator([FromRoute] Guid estateId, [FromBody] AssignOperatorRequest assignOperatorRequest, CancellationToken cancellationToken) { this.V2EstateController.SetContextOverride(this.HttpContext); - ActionResult result = await this.V2EstateController.AssignOperator(estateId, assignOperatorRequest, cancellationToken); + var result = await this.V2EstateController.AssignOperator(estateId, assignOperatorRequest, cancellationToken); return ActionResultHelpers.HandleResult(result, String.Empty); } @@ -136,7 +136,7 @@ public async Task RemoveOperator([FromRoute] Guid estateId, CancellationToken cancellationToken) { this.V2EstateController.SetContextOverride(this.HttpContext); - ActionResult result = await this.V2EstateController.RemoveOperator(estateId, operatorId, cancellationToken); + var result = await this.V2EstateController.RemoveOperator(estateId, operatorId, cancellationToken); return ActionResultHelpers.HandleResult(result, String.Empty); } diff --git a/EstateManagement/Controllers/FileController.cs b/EstateManagement/Controllers/FileController.cs index f0d329c..002dfd0 100644 --- a/EstateManagement/Controllers/FileController.cs +++ b/EstateManagement/Controllers/FileController.cs @@ -56,7 +56,7 @@ public async Task GetFile([FromRoute] Guid estateId, CancellationToken cancellationToken) { this.V2FileController.SetContextOverride(this.HttpContext); - ActionResult> result = await this.V2FileController.GetFile(estateId, fileId, cancellationToken); + var result = await this.V2FileController.GetFile(estateId, fileId, cancellationToken); return ActionResultHelpers.HandleResult(result, ""); } diff --git a/EstateManagement/Controllers/v2/ContractController.cs b/EstateManagement/Controllers/v2/ContractController.cs index 94e32bc..6164143 100644 --- a/EstateManagement/Controllers/v2/ContractController.cs +++ b/EstateManagement/Controllers/v2/ContractController.cs @@ -109,22 +109,22 @@ private Result StandardSecurityChecks(Guid estateId) { [Route("{contractId}")] [SwaggerResponse(200, "OK", typeof(ContractResponse))] [SwaggerResponseExample(200, typeof(ContractResponseExample))] - public async Task>> GetContract([FromRoute] Guid estateId, + public async Task GetContract([FromRoute] Guid estateId, [FromRoute] Guid contractId, CancellationToken cancellationToken) { Result securityChecksResult = StandardSecurityChecks(estateId); if (securityChecksResult.IsFailed) - return securityChecksResult.ToActionResult().Result; + return securityChecksResult.ToActionResultX(); ContractQueries.GetContractQuery query = new ContractQueries.GetContractQuery(estateId, contractId); Result result = await Mediator.Send(query, cancellationToken); if (result.IsFailed) { - var x = result.ToActionResult().Result; + var x = result.ToActionResultX(); return x; } - return ModelFactory.ConvertFrom(result.Data).ToActionResult(); + return ModelFactory.ConvertFrom(result.Data).ToActionResultX(); } /// @@ -137,16 +137,16 @@ public async Task>> GetContract([FromRoute [Route("")] [SwaggerResponse(200, "OK", typeof(List))] [SwaggerResponseExample(200, typeof(ContractResponseListExample))] - public async Task>>> GetContracts([FromRoute] Guid estateId, - CancellationToken cancellationToken) + public async Task GetContracts([FromRoute] Guid estateId, + CancellationToken cancellationToken) { Result securityChecksResult = StandardSecurityChecks(estateId); if (securityChecksResult.IsFailed) - return securityChecksResult.ToActionResult().Result; + return securityChecksResult.ToActionResultX(); ContractQueries.GetContractsQuery query = new ContractQueries.GetContractsQuery(estateId); Result> result = await Mediator.Send(query, cancellationToken); - return ModelFactory.ConvertFrom(result.Data).ToActionResult(); + return ModelFactory.ConvertFrom(result.Data).ToActionResultX(); } @@ -162,14 +162,14 @@ public async Task>>> GetContracts([Fr [Route("{contractId}/products")] [SwaggerResponse(201, "Created", typeof(AddProductToContractResponse))] [SwaggerResponseExample(201, typeof(AddProductToContractResponseExample))] - public async Task> AddProductToContract([FromRoute] Guid estateId, + public async Task AddProductToContract([FromRoute] Guid estateId, [FromRoute] Guid contractId, [FromBody] AddProductToContractRequestDTO addProductToContractRequest, CancellationToken cancellationToken) { Result securityChecksResult = StandardSecurityChecks(estateId); if (securityChecksResult.IsFailed) - return securityChecksResult.ToActionResult().Result; + return securityChecksResult.ToActionResultX(); Guid productId = Guid.NewGuid(); @@ -180,7 +180,7 @@ public async Task> AddProductToContract([FromRoute] Guid es // Route the command Result result = await Mediator.Send(command, cancellationToken); - return result.ToActionResult(); + return result.ToActionResultX(); } /// @@ -196,7 +196,7 @@ public async Task> AddProductToContract([FromRoute] Guid es [Route("{contractId}/products/{productId}/transactionFees")] [SwaggerResponse(201, "Created", typeof(AddTransactionFeeForProductToContractResponse))] [SwaggerResponseExample(201, typeof(AddTransactionFeeForProductToContractResponseExample))] - public async Task> AddTransactionFeeForProductToContract([FromRoute] Guid estateId, + public async Task AddTransactionFeeForProductToContract([FromRoute] Guid estateId, [FromRoute] Guid contractId, [FromRoute] Guid productId, [FromBody] AddTransactionFeeForProductToContractRequestDTO addTransactionFeeForProductToContractRequest, @@ -204,7 +204,7 @@ public async Task> AddTransactionFeeForProductToContract([F { Result securityChecksResult = StandardSecurityChecks(estateId); if (securityChecksResult.IsFailed) - return securityChecksResult.ToActionResult().Result; + return securityChecksResult.ToActionResultX(); Guid transactionFeeId = Guid.NewGuid(); @@ -214,7 +214,7 @@ public async Task> AddTransactionFeeForProductToContract([F // Route the command Result result = await Mediator.Send(command, cancellationToken); - return result.ToActionResult(); + return result.ToActionResultX(); } /// @@ -229,15 +229,15 @@ public async Task> AddTransactionFeeForProductToContract([F [HttpDelete] [Route("{contractId}/products/{productId}/transactionFees/{transactionFeeId}")] [SwaggerResponse(200, "OK")] - public async Task> DisableTransactionFeeForProduct([FromRoute] Guid estateId, - [FromRoute] Guid contractId, - [FromRoute] Guid productId, - [FromRoute] Guid transactionFeeId, - CancellationToken cancellationToken) + public async Task DisableTransactionFeeForProduct([FromRoute] Guid estateId, + [FromRoute] Guid contractId, + [FromRoute] Guid productId, + [FromRoute] Guid transactionFeeId, + CancellationToken cancellationToken) { Result securityChecksResult = StandardSecurityChecks(estateId); if (securityChecksResult.IsFailed) - return securityChecksResult.ToActionResult().Result; + return securityChecksResult.ToActionResultX(); // Create the command DisableTransactionFeeForProductCommand command = new(contractId, estateId, productId, transactionFeeId); @@ -246,7 +246,7 @@ public async Task> DisableTransactionFeeForProduct([FromRou Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } /// @@ -260,13 +260,13 @@ public async Task> DisableTransactionFeeForProduct([FromRou [Route("")] [SwaggerResponse(201, "Created", typeof(CreateContractResponse))] [SwaggerResponseExample(201, typeof(CreateContractResponseExample))] - public async Task> CreateContract([FromRoute] Guid estateId, + public async Task CreateContract([FromRoute] Guid estateId, [FromBody] CreateContractRequestDTO createContractRequest, CancellationToken cancellationToken) { Result securityChecksResult = StandardSecurityChecks(estateId); if (securityChecksResult.IsFailed) - return securityChecksResult.ToActionResult().Result; + return securityChecksResult.ToActionResultX(); Guid contractId = Guid.NewGuid(); @@ -277,7 +277,7 @@ public async Task> CreateContract([FromRoute] Guid estateId Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } #endregion diff --git a/EstateManagement/Controllers/v2/EstateController.cs b/EstateManagement/Controllers/v2/EstateController.cs index 3cad234..b4010be 100644 --- a/EstateManagement/Controllers/v2/EstateController.cs +++ b/EstateManagement/Controllers/v2/EstateController.cs @@ -75,7 +75,7 @@ internal ClaimsPrincipal GetUser() { [Route("")] [SwaggerResponse(201, "Created", typeof(CreateEstateResponse))] [SwaggerResponseExample(201, typeof(CreateEstateResponseExample))] - public async Task> CreateEstate([FromBody] CreateEstateRequest createEstateRequest, + public async Task CreateEstate([FromBody] CreateEstateRequest createEstateRequest, CancellationToken cancellationToken) { // Reject password tokens @@ -90,7 +90,7 @@ public async Task> CreateEstate([FromBody] CreateEstateRequ // Route the command Result result = await Mediator.Send(command, cancellationToken); - return result.ToActionResult(); + return result.ToActionResultX(); } /// @@ -104,8 +104,8 @@ public async Task> CreateEstate([FromBody] CreateEstateRequ [Route("{estateId}")] [SwaggerResponse(200, "OK", typeof(EstateResponse))] [SwaggerResponseExample(200, typeof(EstateResponseExample))] - public async Task>> GetEstate([FromRoute] Guid estateId, - CancellationToken cancellationToken) + public async Task GetEstate([FromRoute] Guid estateId, + CancellationToken cancellationToken) { // Get the Estate Id claim from the user Claim estateIdClaim = ClaimsHelper.GetUserClaim(this.GetUser(), "EstateId", estateId.ToString()); @@ -126,18 +126,18 @@ public async Task>> GetEstate([FromRoute] Gu Result result = await Mediator.Send(query, cancellationToken); if (result.IsFailed) { - return result.ToActionResult().Result; + return result.ToActionResultX(); } - return ModelFactory.ConvertFrom(result.Data).ToActionResult(); + return ModelFactory.ConvertFrom(result.Data).ToActionResultX(); } [HttpGet] [Route("{estateId}/all")] [SwaggerResponse(200, "OK", typeof(List))] [SwaggerResponseExample(200, typeof(EstatesResponseExample))] - public async Task>>> GetEstates([FromRoute] Guid estateId, - CancellationToken cancellationToken) + public async Task GetEstates([FromRoute] Guid estateId, + CancellationToken cancellationToken) { // Get the Estate Id claim from the user Claim estateIdClaim = ClaimsHelper.GetUserClaim(this.GetUser(), "EstateId", estateId.ToString()); @@ -158,10 +158,10 @@ public async Task>>> GetEstates([FromRo Result> result = await Mediator.Send(query, cancellationToken); if (result.IsFailed) { - return result.ToActionResult().Result; + return result.ToActionResultX(); } - return ModelFactory.ConvertFrom(result.Data).ToActionResult(); + return ModelFactory.ConvertFrom(result.Data).ToActionResultX(); } /// @@ -174,9 +174,9 @@ public async Task>>> GetEstates([FromRo [Route("{estateId}/users")] [SwaggerResponse(201, "Created", typeof(CreateEstateUserResponse))] [SwaggerResponseExample(201, typeof(CreateEstateUserResponseExample))] - public async Task> CreateEstateUser([FromRoute] Guid estateId, - [FromBody] CreateEstateUserRequest createEstateUserRequest, - CancellationToken cancellationToken) + public async Task CreateEstateUser([FromRoute] Guid estateId, + [FromBody] CreateEstateUserRequest createEstateUserRequest, + CancellationToken cancellationToken) { // Reject password tokens if (ClaimsHelper.IsPasswordToken(this.GetUser())) @@ -191,12 +191,12 @@ public async Task> CreateEstateUser([FromRoute] Guid estate Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpPatch] [Route("{estateId}/operators")] - public async Task> AssignOperator([FromRoute] Guid estateId, [FromBody] AssignOperatorRequest assignOperatorRequest, CancellationToken cancellationToken) + public async Task AssignOperator([FromRoute] Guid estateId, [FromBody] AssignOperatorRequest assignOperatorRequest, CancellationToken cancellationToken) { // Reject password tokens if (ClaimsHelper.IsPasswordToken(this.GetUser())) @@ -211,12 +211,12 @@ public async Task> AssignOperator([FromRoute] Guid estateId Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpDelete] [Route("{estateId}/operators/{operatorId}")] - public async Task> RemoveOperator([FromRoute] Guid estateId, + public async Task RemoveOperator([FromRoute] Guid estateId, [FromRoute] Guid operatorId, CancellationToken cancellationToken) { @@ -232,7 +232,7 @@ public async Task> RemoveOperator([FromRoute] Guid estateId Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } #endregion diff --git a/EstateManagement/Controllers/v2/FileController.cs b/EstateManagement/Controllers/v2/FileController.cs index b0ab063..eb42bfd 100644 --- a/EstateManagement/Controllers/v2/FileController.cs +++ b/EstateManagement/Controllers/v2/FileController.cs @@ -66,9 +66,9 @@ internal ClaimsPrincipal GetUser() [Route("{fileId}")] //[SwaggerResponse(200, "OK", typeof(ContractResponse))] //[SwaggerResponseExample(200, typeof(ContractResponseExample))] - public async Task>> GetFile([FromRoute] Guid estateId, - [FromRoute] Guid fileId, - CancellationToken cancellationToken) + public async Task GetFile([FromRoute] Guid estateId, + [FromRoute] Guid fileId, + CancellationToken cancellationToken) { // Get the Estate Id claim from the user Claim estateIdClaim = ClaimsHelper.GetUserClaim(this.GetUser(), "EstateId", estateId.ToString()); @@ -88,7 +88,7 @@ public async Task>> GetFile([FromRoute] Result result = await Mediator.Send(query, cancellationToken); - return ModelFactory.ConvertFrom(result.Data).ToActionResult(); + return ModelFactory.ConvertFrom(result.Data).ToActionResultX(); } } diff --git a/EstateManagement/Controllers/v2/MerchantController.cs b/EstateManagement/Controllers/v2/MerchantController.cs index 55be773..43e77c3 100644 --- a/EstateManagement/Controllers/v2/MerchantController.cs +++ b/EstateManagement/Controllers/v2/MerchantController.cs @@ -1,4 +1,7 @@ -using SimpleResults; +using System.Net; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Shared.EventStore.Aggregate; +using SimpleResults; namespace EstateManagement.Controllers.v2 { @@ -75,7 +78,7 @@ internal ClaimsPrincipal GetUser() [Route("")] [SwaggerResponse(201, "Created", typeof(CreateMerchantResponse))] [SwaggerResponseExample(201, typeof(CreateMerchantResponseExample))] - public async Task> CreateMerchant([FromRoute] Guid estateId, + public async Task CreateMerchant([FromRoute] Guid estateId, [FromBody] CreateMerchantRequest createMerchantRequest, CancellationToken cancellationToken) { @@ -91,7 +94,7 @@ public async Task> CreateMerchant([FromRoute] Guid estateId Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } @@ -100,10 +103,10 @@ public async Task> CreateMerchant([FromRoute] Guid estateId [ProducesResponseType(typeof(AssignOperatorResponse), 201)] [SwaggerResponse(201, "Created", typeof(AssignOperatorResponse))] [SwaggerResponseExample(201, typeof(AssignOperatorResponseExample))] - public async Task> AssignOperator([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - AssignOperatorRequest assignOperatorRequest, - CancellationToken cancellationToken) + public async Task AssignOperator([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + AssignOperatorRequest assignOperatorRequest, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); if (isRequestAllowed == false) @@ -117,15 +120,15 @@ public async Task> AssignOperator([FromRoute] Guid estateId Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpDelete] [Route("{merchantId}/operators/{operatorId}")] - public async Task> RemoveOperator([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - [FromRoute] Guid operatorId, - CancellationToken cancellationToken) + public async Task RemoveOperator([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + [FromRoute] Guid operatorId, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); if (isRequestAllowed == false) @@ -139,17 +142,17 @@ public async Task> RemoveOperator([FromRoute] Guid estateId Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpPatch] [Route("{merchantId}/devices")] [SwaggerResponse(201, "Created", typeof(AddMerchantDeviceResponse))] [SwaggerResponseExample(201, typeof(AddMerchantDeviceResponseExample))] - public async Task> AddDevice([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - [FromBody] AddMerchantDeviceRequest addMerchantDeviceRequest, - CancellationToken cancellationToken) + public async Task AddDevice([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + [FromBody] AddMerchantDeviceRequest addMerchantDeviceRequest, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); if (isRequestAllowed == false) @@ -163,15 +166,15 @@ public async Task> AddDevice([FromRoute] Guid estateId, Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpPatch] [Route("{merchantId}/contracts")] - public async Task> AddContract([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - [FromBody] AddMerchantContractRequest addMerchantContractRequest, - CancellationToken cancellationToken) + public async Task AddContract([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + [FromBody] AddMerchantContractRequest addMerchantContractRequest, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); if (isRequestAllowed == false) @@ -185,15 +188,15 @@ public async Task> AddContract([FromRoute] Guid estateId, Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpDelete] [Route("{merchantId}/contracts/{contractId}")] - public async Task> RemoveContract([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - [FromRoute] Guid contractId, - CancellationToken cancellationToken) + public async Task RemoveContract([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + [FromRoute] Guid contractId, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); if (isRequestAllowed == false) @@ -207,17 +210,17 @@ public async Task> RemoveContract([FromRoute] Guid estateId Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpPatch] [Route("{merchantId}/users")] [SwaggerResponse(201, "Created", typeof(CreateMerchantUserResponse))] [SwaggerResponseExample(201, typeof(CreateMerchantUserResponseExample))] - public async Task> CreateMerchantUser([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - [FromBody] CreateMerchantUserRequest createMerchantUserRequest, - CancellationToken cancellationToken) + public async Task CreateMerchantUser([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + [FromBody] CreateMerchantUserRequest createMerchantUserRequest, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); if (isRequestAllowed == false) @@ -231,17 +234,17 @@ public async Task> CreateMerchantUser([FromRoute] Guid esta Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpPost] [Route("{merchantId}/deposits")] [SwaggerResponse(201, "Created", typeof(MakeMerchantDepositResponse))] [SwaggerResponseExample(201, typeof(MakeMerchantDepositResponseExample))] - public async Task> MakeDeposit([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - [FromBody] MakeMerchantDepositRequest makeMerchantDepositRequest, - CancellationToken cancellationToken) + public async Task MakeDeposit([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + [FromBody] MakeMerchantDepositRequest makeMerchantDepositRequest, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); if (isRequestAllowed == false) @@ -256,17 +259,17 @@ public async Task> MakeDeposit([FromRoute] Guid estateId, Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpPost] [Route("{merchantId}/withdrawals")] //[SwaggerResponse(201, "Created", typeof(MakeMerchantDepositResponse))] //[SwaggerResponseExample(201, typeof(MakeMerchantDepositResponseExample))] - public async Task> MakeWithdrawal([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - [FromBody] MakeMerchantWithdrawalRequest makeMerchantWithdrawalRequest, - CancellationToken cancellationToken) + public async Task MakeWithdrawal([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + [FromBody] MakeMerchantWithdrawalRequest makeMerchantWithdrawalRequest, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); if (isRequestAllowed == false) @@ -280,7 +283,7 @@ public async Task> MakeWithdrawal([FromRoute] Guid estateId Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } @@ -288,11 +291,11 @@ public async Task> MakeWithdrawal([FromRoute] Guid estateId [Route("{merchantId}/devices/{deviceIdentifier}")] [SwaggerResponse(201, "Created", typeof(SwapMerchantDeviceResponse))] [SwaggerResponseExample(201, typeof(AddMerchantDeviceResponseExample))] - public async Task> SwapMerchantDevice([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - [FromRoute] string deviceIdentifier, - [FromBody] SwapMerchantDeviceRequest swapMerchantDeviceRequest, - CancellationToken cancellationToken) + public async Task SwapMerchantDevice([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + [FromRoute] string deviceIdentifier, + [FromBody] SwapMerchantDeviceRequest swapMerchantDeviceRequest, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); if (isRequestAllowed == false) @@ -306,17 +309,17 @@ public async Task> SwapMerchantDevice([FromRoute] Guid esta Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpPost] [Route("{merchantId}/statements")] [SwaggerResponse(201, "Created", typeof(GenerateMerchantStatementResponse))] [SwaggerResponseExample(201, typeof(GenerateMerchantStatementResponseExample))] - public async Task> GenerateMerchantStatement([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - [FromBody] GenerateMerchantStatementRequest generateMerchantStatementRequest, - CancellationToken cancellationToken) + public async Task GenerateMerchantStatement([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + [FromBody] GenerateMerchantStatementRequest generateMerchantStatementRequest, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); if (isRequestAllowed == false) @@ -330,16 +333,16 @@ public async Task> GenerateMerchantStatement([FromRoute] Gu Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpGet] [Route("{merchantId}")] [SwaggerResponse(200, "OK", typeof(MerchantResponse))] [SwaggerResponseExample(200, typeof(MerchantResponseExample))] - public async Task>> GetMerchant([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - CancellationToken cancellationToken) + public async Task GetMerchant([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformMerchantUserChecks(estateId, merchantId); if (isRequestAllowed == false) @@ -351,15 +354,16 @@ public async Task>> GetMerchant([FromRoute // Route the query Result result = await Mediator.Send(query, cancellationToken); - - return ModelFactory.ConvertFrom(result.Data).ToActionResult(); + if (result.IsFailed) + return result.ToActionResultX(); + return ModelFactory.ConvertFrom(result.Data).ToActionResultX(); } - + [Route("{merchantId}/contracts")] [HttpGet] [SwaggerResponse(200, "OK", typeof(List))] [SwaggerResponseExample(200, typeof(ContractResponseListExample))] - public async Task>>> GetMerchantContracts([FromRoute] Guid estateId, + public async Task GetMerchantContracts([FromRoute] Guid estateId, [FromRoute] Guid merchantId, CancellationToken cancellationToken) { @@ -373,14 +377,14 @@ public async Task>>> GetMerchantContr Result> result = await Mediator.Send(query, cancellationToken); - return ModelFactory.ConvertFrom(result.Data).ToActionResult(); + return ModelFactory.ConvertFrom(result.Data).ToActionResultX(); } [HttpGet] [Route("")] [SwaggerResponse(200, "OK", typeof(List))] [SwaggerResponseExample(200, typeof(MerchantResponseListExample))] - public async Task>>> GetMerchants([FromRoute] Guid estateId, + public async Task GetMerchants([FromRoute] Guid estateId, CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); @@ -393,7 +397,7 @@ public async Task>>> GetMerchants([Fr Result> result = await Mediator.Send(query, cancellationToken); - return ModelFactory.ConvertFrom(result.Data).ToActionResult(); + return ModelFactory.ConvertFrom(result.Data).ToActionResultX(); } [Route("{merchantId}/contracts/{contractId}/products/{productId}/transactionFees")] @@ -401,7 +405,7 @@ public async Task>>> GetMerchants([Fr [ProducesResponseType(typeof(List), 200)] [SwaggerResponse(200, "OK", typeof(List))] [SwaggerResponseExample(200, typeof(ContractProductTransactionFeeResponseListExample))] - public async Task>>> GetTransactionFeesForProduct([FromRoute] Guid estateId, + public async Task GetTransactionFeesForProduct([FromRoute] Guid estateId, [FromRoute] Guid merchantId, [FromRoute] Guid contractId, [FromRoute] Guid productId, @@ -417,7 +421,7 @@ public async Task>>> GetMerchants([Fr List transactionFees = await Mediator.Send(query, cancellationToken); - return ModelFactory.ConvertFrom(transactionFees).ToActionResult(); + return ModelFactory.ConvertFrom(transactionFees).ToActionResultX(); } @@ -474,10 +478,10 @@ private bool PerformStandardChecks(Guid estateId) [HttpPatch] [Route("{merchantId}")] [SwaggerResponse(204, "No Content")] - public async Task> UpdateMerchant([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - [FromBody] UpdateMerchantRequest updateMerchantRequest, - CancellationToken cancellationToken) + public async Task UpdateMerchant([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + [FromBody] UpdateMerchantRequest updateMerchantRequest, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); @@ -492,14 +496,14 @@ public async Task> UpdateMerchant([FromRoute] Guid estateId Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [Route("{merchantId}/addresses")] [HttpPatch] //[SwaggerResponse(200, "OK", typeof(List))] //[SwaggerResponseExample(200, typeof(ContractResponseListExample))] - public async Task> AddMerchantAddress([FromRoute] Guid estateId, + public async Task AddMerchantAddress([FromRoute] Guid estateId, [FromRoute] Guid merchantId, [FromBody] DataTransferObjects.Requests.Merchant.Address addAddressRequest, CancellationToken cancellationToken) @@ -516,18 +520,18 @@ public async Task> AddMerchantAddress([FromRoute] Guid esta Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [Route("{merchantId}/addresses/{addressId}")] [HttpPatch] //[SwaggerResponse(200, "OK", typeof(List))] //[SwaggerResponseExample(200, typeof(ContractResponseListExample))] - public async Task> UpdateMerchantAddress([FromRoute] Guid estateId, - [FromRoute] Guid merchantId, - [FromRoute] Guid addressId, - [FromBody] DataTransferObjects.Requests.Merchant.Address updateAddressRequest, - CancellationToken cancellationToken) + public async Task UpdateMerchantAddress([FromRoute] Guid estateId, + [FromRoute] Guid merchantId, + [FromRoute] Guid addressId, + [FromBody] DataTransferObjects.Requests.Merchant.Address updateAddressRequest, + CancellationToken cancellationToken) { bool isRequestAllowed = PerformStandardChecks(estateId); if (isRequestAllowed == false) @@ -541,14 +545,14 @@ public async Task> UpdateMerchantAddress([FromRoute] Guid e Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [Route("{merchantId}/contacts")] [HttpPatch] //[SwaggerResponse(200, "OK", typeof(List))] //[SwaggerResponseExample(200, typeof(ContractResponseListExample))] - public async Task> AddMerchantContact([FromRoute] Guid estateId, + public async Task AddMerchantContact([FromRoute] Guid estateId, [FromRoute] Guid merchantId, [FromBody] DataTransferObjects.Requests.Merchant.Contact addContactRrequest, CancellationToken cancellationToken) @@ -565,14 +569,14 @@ public async Task> AddMerchantContact([FromRoute] Guid esta Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [Route("{merchantId}/contacts/{contactId}")] [HttpPatch] //[SwaggerResponse(200, "OK", typeof(List))] //[SwaggerResponseExample(200, typeof(ContractResponseListExample))] - public async Task> UpdateMerchantContact([FromRoute] Guid estateId, + public async Task UpdateMerchantContact([FromRoute] Guid estateId, [FromRoute] Guid merchantId, [FromRoute] Guid contactId, [FromBody] DataTransferObjects.Requests.Merchant.Contact updateContactRequest, @@ -590,7 +594,7 @@ public async Task> UpdateMerchantContact([FromRoute] Guid e Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } #endregion @@ -609,4 +613,60 @@ public async Task> UpdateMerchantContact([FromRoute] Guid e #endregion } + + public static class ResultExtensions { + public static IActionResult ToActionResultX(this Result result) + { + if (result.IsSuccess) + return new OkObjectResult(result); + + return result.Status switch + { + ResultStatus.Invalid => new BadRequestObjectResult(result), + ResultStatus.NotFound => new NotFoundObjectResult(result), + ResultStatus.Unauthorized => new UnauthorizedObjectResult(result), + ResultStatus.Conflict => new ConflictObjectResult(result), + ResultStatus.Failure => CreateObjectResult(result, HttpStatusCode.InternalServerError), + ResultStatus.CriticalError => CreateObjectResult(result, HttpStatusCode.InternalServerError), + ResultStatus.Forbidden => new ForbidResult(), + _ => CreateObjectResult(result, HttpStatusCode.NotImplemented) + + }; + } + + internal static IActionResult ToActionResultX(this Result result) + { + if (result.IsSuccess) + return new OkObjectResult(result); + + return result.Status switch + { + ResultStatus.Invalid => new BadRequestObjectResult(result), + ResultStatus.NotFound => new NotFoundObjectResult(result), + ResultStatus.Unauthorized => new UnauthorizedObjectResult(result), + ResultStatus.Conflict => new ConflictObjectResult(result), + ResultStatus.Failure => CreateObjectResult(result, HttpStatusCode.InternalServerError), + ResultStatus.CriticalError => CreateObjectResult(result, HttpStatusCode.InternalServerError), + ResultStatus.Forbidden => new ForbidResult(), + _ => CreateObjectResult(result, HttpStatusCode.NotImplemented) + + }; + } + + internal static ObjectResult CreateObjectResult(Result result, + HttpStatusCode statusCode) + { + ObjectResult or = new ObjectResult(result); + or.StatusCode = (Int32)statusCode; + return or; + } + + internal static ObjectResult CreateObjectResult(Result result, + HttpStatusCode statusCode) + { + ObjectResult or = new ObjectResult(result); + or.StatusCode = (Int32)statusCode; + return or; + } + } } \ No newline at end of file diff --git a/EstateManagement/Controllers/v2/OperatorController.cs b/EstateManagement/Controllers/v2/OperatorController.cs index 55b48ce..8c6b682 100644 --- a/EstateManagement/Controllers/v2/OperatorController.cs +++ b/EstateManagement/Controllers/v2/OperatorController.cs @@ -66,7 +66,7 @@ internal ClaimsPrincipal GetUser() [Route("")] [SwaggerResponse(201, "Created", typeof(CreateOperatorResponse))] [SwaggerResponseExample(201, typeof(CreateOperatorResponseExample))] - public async Task> CreateOperator([FromRoute] Guid estateId, [FromBody] CreateOperatorRequest createOperatorRequest, CancellationToken cancellationToken) + public async Task CreateOperator([FromRoute] Guid estateId, [FromBody] CreateOperatorRequest createOperatorRequest, CancellationToken cancellationToken) { // Create the command OperatorCommands.CreateOperatorCommand command = new OperatorCommands.CreateOperatorCommand(estateId, createOperatorRequest); @@ -75,13 +75,13 @@ public async Task> CreateOperator([FromRoute] Guid estateId Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } [HttpPost] [Route("{operatorId}")] [SwaggerResponse(200, "OK")] - public async Task> UpdateOperator([FromRoute] Guid estateId, [FromRoute] Guid operatorId, [FromBody] UpdateOperatorRequest updateOperatorRequest, CancellationToken cancellationToken) + public async Task UpdateOperator([FromRoute] Guid estateId, [FromRoute] Guid operatorId, [FromBody] UpdateOperatorRequest updateOperatorRequest, CancellationToken cancellationToken) { // Create the command OperatorCommands.UpdateOperatorCommand command = new OperatorCommands.UpdateOperatorCommand(estateId, operatorId, updateOperatorRequest); @@ -90,7 +90,7 @@ public async Task> UpdateOperator([FromRoute] Guid estateId Result result = await Mediator.Send(command, cancellationToken); // return the result - return result.ToActionResult(); + return result.ToActionResultX(); } @@ -98,9 +98,9 @@ public async Task> UpdateOperator([FromRoute] Guid estateId [Route("{operatorId}")] [SwaggerResponse(200, "OK", typeof(OperatorResponse))] [SwaggerResponseExample(201, typeof(OperatorResponseExample))] - public async Task>> GetOperator([FromRoute] Guid estateId, - [FromRoute] Guid operatorId, - CancellationToken cancellationToken) + public async Task GetOperator([FromRoute] Guid estateId, + [FromRoute] Guid operatorId, + CancellationToken cancellationToken) { // Create the command OperatorQueries.GetOperatorQuery query = new(estateId, operatorId); @@ -108,15 +108,15 @@ public async Task>> GetOperator([FromRoute // Route the command Operator @operator = await Mediator.Send(query, cancellationToken); - return ModelFactory.ConvertFrom(@operator).ToActionResult(); + return ModelFactory.ConvertFrom(@operator).ToActionResultX(); } [HttpGet] [Route("")] [SwaggerResponse(200, "OK", typeof(OperatorResponse))] [SwaggerResponseExample(201, typeof(OperatorResponseExample))] - public async Task>>> GetOperators([FromRoute] Guid estateId, - CancellationToken cancellationToken) + public async Task GetOperators([FromRoute] Guid estateId, + CancellationToken cancellationToken) { // Create the command OperatorQueries.GetOperatorsQuery query = new(estateId); @@ -124,7 +124,7 @@ public async Task>>> GetOperators([Fr // Route the command List @operatorList = await Mediator.Send(query, cancellationToken); - return ModelFactory.ConvertFrom(@operatorList).ToActionResult(); + return ModelFactory.ConvertFrom(@operatorList).ToActionResultX(); } #region Others diff --git a/EstateManagement/Controllers/v2/SettlementController.cs b/EstateManagement/Controllers/v2/SettlementController.cs index 727954b..152931b 100644 --- a/EstateManagement/Controllers/v2/SettlementController.cs +++ b/EstateManagement/Controllers/v2/SettlementController.cs @@ -36,29 +36,29 @@ public SettlementController(IMediator mediator) { [Route("{settlementId}")] [HttpGet] - public async Task>> GetSettlement([FromRoute] Guid estateId, - [FromQuery] Guid merchantId, - [FromRoute] Guid settlementId, - CancellationToken cancellationToken) { + public async Task GetSettlement([FromRoute] Guid estateId, + [FromQuery] Guid merchantId, + [FromRoute] Guid settlementId, + CancellationToken cancellationToken) { SettlementQueries.GetSettlementQuery query = new SettlementQueries.GetSettlementQuery(estateId, merchantId, settlementId); Result result = await this.Mediator.Send(query, cancellationToken); - return ModelFactory.ConvertFrom(result.Data).ToActionResult(); + return ModelFactory.ConvertFrom(result.Data).ToActionResultX(); } [Route("")] [HttpGet] - public async Task>>> GetSettlements([FromRoute] Guid estateId, - [FromQuery] Guid? merchantId, - [FromQuery(Name = "start_date")] String startDate, - [FromQuery(Name = "end_date")] String endDate, - CancellationToken cancellationToken) { + public async Task GetSettlements([FromRoute] Guid estateId, + [FromQuery] Guid? merchantId, + [FromQuery(Name = "start_date")] String startDate, + [FromQuery(Name = "end_date")] String endDate, + CancellationToken cancellationToken) { SettlementQueries.GetSettlementsQuery query = new SettlementQueries.GetSettlementsQuery(estateId, merchantId, startDate, endDate); Result> result = await this.Mediator.Send(query, cancellationToken); - return ModelFactory.ConvertFrom(result.Data).ToActionResult(); + return ModelFactory.ConvertFrom(result.Data).ToActionResultX(); } #endregion diff --git a/EstateManagement/EstateManagement.csproj b/EstateManagement/EstateManagement.csproj index 8fd02e2..d715d49 100644 --- a/EstateManagement/EstateManagement.csproj +++ b/EstateManagement/EstateManagement.csproj @@ -37,7 +37,6 @@ -