diff --git a/0_Framework/Exceptions/BadRequestException.cs b/0_Framework/Exceptions/BadRequestException.cs index 05741918..7a85e96f 100644 --- a/0_Framework/Exceptions/BadRequestException.cs +++ b/0_Framework/Exceptions/BadRequestException.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace _0_Framework.Exceptions; @@ -14,16 +15,13 @@ public class BadRequestException:Exception Details = details; } - public string Details { get; } -} - -public class SmsServiceException:BadRequestException -{ - - public SmsServiceException(string message, int expireTime) : base(message) + public BadRequestException(string message, Dictionary extra) : + base(message) { - ExpireTime = expireTime; + Extra = extra; } - public int ExpireTime { get; set; } + public string Details { get; } + public Dictionary Extra { get; set; } + } \ No newline at end of file diff --git a/0_Framework/Exceptions/Handler/CustomExceptionHandler.cs b/0_Framework/Exceptions/Handler/CustomExceptionHandler.cs index a3a8fc4c..e6fd9da1 100644 --- a/0_Framework/Exceptions/Handler/CustomExceptionHandler.cs +++ b/0_Framework/Exceptions/Handler/CustomExceptionHandler.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Diagnostics; @@ -24,37 +25,42 @@ public class CustomExceptionHandler : IExceptionHandler "Error Message: {exceptionMessage}, Time of occurrence {time}", exception.Message, DateTime.UtcNow); - (string Detail, string Title, int StatusCode) details = exception switch + (string Detail, string Title, int StatusCode, Dictionary? Extra) details = exception switch { InternalServerException => ( exception.Message, exception.GetType().Name, - context.Response.StatusCode = StatusCodes.Status500InternalServerError + context.Response.StatusCode = StatusCodes.Status500InternalServerError, + null ), - BadRequestException => + BadRequestException bre => ( exception.Message, exception.GetType().Name, - context.Response.StatusCode = StatusCodes.Status400BadRequest + context.Response.StatusCode = StatusCodes.Status400BadRequest, + bre.Extra ), NotFoundException => ( exception.Message, exception.GetType().Name, - context.Response.StatusCode = StatusCodes.Status404NotFound + context.Response.StatusCode = StatusCodes.Status404NotFound, + null ), UnAuthorizeException => ( exception.Message, exception.GetType().Name, - context.Response.StatusCode = StatusCodes.Status401Unauthorized + context.Response.StatusCode = StatusCodes.Status401Unauthorized, + null ), _ => ( exception.Message, exception.GetType().Name, - context.Response.StatusCode = StatusCodes.Status500InternalServerError + context.Response.StatusCode = StatusCodes.Status500InternalServerError, + null ) }; @@ -63,9 +69,12 @@ public class CustomExceptionHandler : IExceptionHandler Title = details.Title, Detail = details.Detail, Status = details.StatusCode, - Instance = context.Request.Path + Instance = context.Request.Path, + Extensions = details.Extra ?? new Dictionary() }; + + problemDetails.Extensions.Add("traceId", context.TraceIdentifier); await context.Response.WriteAsJsonAsync(problemDetails, cancellationToken: cancellationToken); diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 60cf4fe9..1da3a645 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -25,6 +25,7 @@ using CompanyManagment.App.Contracts.InstitutionContractContactinfo; using CompanyManagment.App.Contracts.PersonalContractingParty; using CompanyManagment.App.Contracts.Workshop; using CompanyManagment.EFCore.Migrations; +using OfficeOpenXml.Packaging.Ionic.Zip; using PersianTools.Core; using ConnectedPersonnelViewModel = CompanyManagment.App.Contracts.Workshop.ConnectedPersonnelViewModel; using FinancialStatment = Company.Domain.FinancialStatmentAgg.FinancialStatment; @@ -1102,7 +1103,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication { return await _institutionContractRepository.GetVerificationDetails(id); } - + public async Task> SendVerifyOtp(Guid id) { @@ -1114,14 +1115,18 @@ public class InstitutionContractApplication : IInstitutionContractApplication if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified) throw new BadRequestException("این قرارداد مالی قبلا تایید شده است"); - + if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.PendingForVerify && institutionContract.VerifyCodeCreation != DateTime.MinValue) { if (!institutionContract.CanResendVerifyCode) { - throw new SmsServiceException("کد تایید قبلی هنوز منقضی نشده است", - (int)institutionContract.ReSendTime.TotalSeconds - (int)(DateTime.Now - institutionContract.VerifyCodeCreation).TotalSeconds); + throw new BadRequestException("کد تایید قبلی هنوز منقضی نشده است", + new Dictionary + { + { "expireTime", (int)institutionContract.ReSendTime.TotalSeconds - + (int)(DateTime.Now - institutionContract.VerifyCodeCreation).TotalSeconds } + }); } }