feat: add exception and opt bugs

This commit is contained in:
2025-09-29 13:15:04 +03:30
parent 413bd3aad9
commit f5c3e6351c
6 changed files with 45 additions and 8 deletions

View File

@@ -0,0 +1,7 @@
namespace _0_Framework.Application.Sms;
public class OtpResultViewModel
{
public int ExpireTimeSec { get; set; }
public int ReSendTimeSec { get; set; }
}

View File

@@ -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; }
}

View File

@@ -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; }

View File

@@ -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<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
Task<OperationResult> SendVerifyOtp(Guid id);
Task<OperationResult<OtpResultViewModel>> SendVerifyOtp(Guid id);
Task<OperationResult> VerifyOtp(Guid publicId, string code);
}

View File

@@ -1104,7 +1104,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
}
public async Task<OperationResult> SendVerifyOtp(Guid id)
public async Task<OperationResult<OtpResultViewModel>> 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<OtpResultViewModel>().Succcedded(result);
}
public async Task<OperationResult> VerifyOtp(Guid publicId, string code)

View File

@@ -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<ActionResult<OperationResult>> SendVerifyOtp(Guid id)
public async Task<ActionResult<OperationResult<OtpResultViewModel>>> SendVerifyOtp(Guid id)
{
var res = await _institutionContractApplication.SendVerifyOtp(id);
return res;