From f5c3e6351cdde859119ddd971689065ed48f417c Mon Sep 17 00:00:00 2001 From: mahan Date: Mon, 29 Sep 2025 13:15:04 +0330 Subject: [PATCH] feat: add exception and opt bugs --- 0_Framework/Application/Sms/OtpResultViewModel.cs | 7 +++++++ 0_Framework/Exceptions/BadRequestException.cs | 11 +++++++++++ .../InstitutionContractAgg/InstitutionContract.cs | 15 +++++++++++++-- .../IInstitutionContractApplication.cs | 3 ++- .../InstitutionContractApplication.cs | 14 ++++++++++---- .../Controllers/institutionContractController.cs | 3 ++- 6 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 0_Framework/Application/Sms/OtpResultViewModel.cs diff --git a/0_Framework/Application/Sms/OtpResultViewModel.cs b/0_Framework/Application/Sms/OtpResultViewModel.cs new file mode 100644 index 00000000..ea85d622 --- /dev/null +++ b/0_Framework/Application/Sms/OtpResultViewModel.cs @@ -0,0 +1,7 @@ +namespace _0_Framework.Application.Sms; + +public class OtpResultViewModel +{ + public int ExpireTimeSec { get; set; } + public int ReSendTimeSec { get; set; } +} \ No newline at end of file diff --git a/0_Framework/Exceptions/BadRequestException.cs b/0_Framework/Exceptions/BadRequestException.cs index ac8324b7..05741918 100644 --- a/0_Framework/Exceptions/BadRequestException.cs +++ b/0_Framework/Exceptions/BadRequestException.cs @@ -15,4 +15,15 @@ public class BadRequestException:Exception } public string Details { get; } +} + +public class SmsServiceException:BadRequestException +{ + + public SmsServiceException(string message, int expireTime) : base(message) + { + ExpireTime = expireTime; + } + + public int ExpireTime { get; set; } } \ No newline at end of file diff --git a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs index 33ccbd3f..891b5081 100644 --- a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs +++ b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs @@ -122,11 +122,22 @@ public class InstitutionContract : EntityBase public string VerifyCode { get; private set; } public DateTime VerifyCodeCreation { get; private set; } + + + + [NotMapped] - public bool VerifyCodeExpired => VerifyCodeCreation.AddMinutes(5) <= DateTime.Now; + public bool VerifyCodeExpired => VerifyCodeCreation.Add(ExpireTime) <= DateTime.Now; [NotMapped] - public bool CanCreateNewVerifyCode => VerifyCodeCreation.AddMinutes(2) <= DateTime.Now; + public bool CanResendVerifyCode => VerifyCodeCreation.Add(ReSendTime) <= DateTime.Now; + + [NotMapped] public TimeSpan ExpireTime => TimeSpan.FromMinutes(5); + + + + [NotMapped] public TimeSpan ReSendTime => TimeSpan.FromMinutes(2); + public bool IsInstallment { get; set; } diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index 737254d9..634fc62c 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.Application.Enums; +using _0_Framework.Application.Sms; using CompanyManagment.App.Contracts.Checkout; using CompanyManagment.App.Contracts.Workshop; using Microsoft.AspNetCore.Mvc; @@ -213,7 +214,7 @@ public interface IInstitutionContractApplication #endregion Task GetVerificationDetails(Guid id); - Task SendVerifyOtp(Guid id); + Task> SendVerifyOtp(Guid id); Task VerifyOtp(Guid publicId, string code); } diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 7124cd1e..60cf4fe9 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -1104,7 +1104,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication } - public async Task SendVerifyOtp(Guid id) + public async Task> SendVerifyOtp(Guid id) { var institutionContract = await _institutionContractRepository.GetByPublicIdAsync(id); if (institutionContract == null) @@ -1118,9 +1118,10 @@ public class InstitutionContractApplication : IInstitutionContractApplication if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.PendingForVerify && institutionContract.VerifyCodeCreation != DateTime.MinValue) { - if (!institutionContract.CanCreateNewVerifyCode) + if (!institutionContract.CanResendVerifyCode) { - throw new BadRequestException("کد تایید قبلی هنوز منقضی نشده است"); + throw new SmsServiceException("کد تایید قبلی هنوز منقضی نشده است", + (int)institutionContract.ReSendTime.TotalSeconds - (int)(DateTime.Now - institutionContract.VerifyCodeCreation).TotalSeconds); } } @@ -1145,7 +1146,12 @@ public class InstitutionContractApplication : IInstitutionContractApplication } await transaction.CommitAsync(); - return new OperationResult().Succcedded(); + var result = new OtpResultViewModel + { + ExpireTimeSec = (int)institutionContract.ExpireTime.TotalSeconds, + ReSendTimeSec = (int)institutionContract.ReSendTime.TotalSeconds + }; + return new OperationResult().Succcedded(result); } public async Task VerifyOtp(Guid publicId, string code) diff --git a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs index 525c58a6..b182ef82 100644 --- a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs +++ b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs @@ -1,6 +1,7 @@ using System.Transactions; using _0_Framework.Application; using _0_Framework.Application.Enums; +using _0_Framework.Application.Sms; using _0_Framework.Exceptions; using AccountManagement.Application.Contracts.Account; using Company.Domain.TemporaryClientRegistrationAgg; @@ -718,7 +719,7 @@ public class institutionContractController : AdminBaseController [HttpPost("/api/institutionContract/Verification/{id:guid}/send-otp")] [AllowAnonymous] - public async Task> SendVerifyOtp(Guid id) + public async Task>> SendVerifyOtp(Guid id) { var res = await _institutionContractApplication.SendVerifyOtp(id); return res;