Add status and verification code handling to ContractingPartyTemp

This commit is contained in:
2025-09-16 11:46:17 +03:30
parent 18e559f1ae
commit ad4cffffcd
7 changed files with 10701 additions and 26 deletions

View File

@@ -22,6 +22,7 @@ public class ContractingPartyTemp : EntityBase
Gender = gender;
DateOfBirth = dateOfBirth;
PublicId = Guid.NewGuid();
Status = ContractingPartyTempStatus.InComplete;
}
/// <summary>
@@ -92,6 +93,11 @@ public class ContractingPartyTemp : EntityBase
/// </summary>
public string Address { get; private set; }
public ContractingPartyTempStatus Status { get; set; }
public string VerifyCode { get; set; }
public DateTime VerifyCodeSentDateTime { get; set; }
public Guid PublicId { get; set; }
public void UpdateAddress(string state, string city, string address)
@@ -100,4 +106,21 @@ public class ContractingPartyTemp : EntityBase
this.City = city;
this.Address = address;
}
public void SetCompleted()
{
Status = ContractingPartyTempStatus.Completed;
}
public void SetVerifyCode(string verifyCode)
{
VerifyCode = verifyCode;
VerifyCodeSentDateTime = DateTime.Now;
}
}
public enum ContractingPartyTempStatus
{
InComplete,
Completed
}

View File

@@ -848,31 +848,27 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
public async Task<OperationResult> CheckVerifyCodeIsTrue(long contractingPartyTempId, string verifyCode)
{
var op = new OperationResult();
var institutionContractTemp = await
_institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId);
if (institutionContractTemp == null)
var contractingPartyTemp = _contractingPartyTempRepository.Get( contractingPartyTempId);
if (contractingPartyTemp == null)
return op.Failed("خظا");
if (institutionContractTemp.RegistrationStatus != InstitutionContractTempStatus.VerifyCodeSent)
return op.Failed("خطا");
if (contractingPartyTemp.Status != ContractingPartyTempStatus.InComplete)
return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید");
if (institutionContractTemp.VerifyCodeEndTime < DateTime.Now)
if (contractingPartyTemp.VerifyCodeSentDateTime.AddMinutes(2) < DateTime.Now)
return op.Failed("کد شما منقضی شده است");
if (institutionContractTemp.SendVerifyCodeTime < DateTime.Now &&
institutionContractTemp.VerifyCodeEndTime >= DateTime.Now)
if (contractingPartyTemp.VerifyCodeSentDateTime < DateTime.Now &&
contractingPartyTemp.VerifyCodeSentDateTime >= DateTime.Now)
{
if (institutionContractTemp.VerifyCode == verifyCode)
if (contractingPartyTemp.VerifyCode == verifyCode)
{
contractingPartyTemp.SetCompleted();
await _contractingPartyTempRepository.SaveChangesAsync();
return op.Succcedded();
}
else
{
return op.Failed("کد وارد شده صحیح نیست");
}
}
return op.Failed("کد وارد شده صحیح نیست");
}
@@ -918,15 +914,19 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
public async Task<OperationResult> SendAgreementLink(long contractingPartyTempId)
{
var op = new OperationResult();
var institutionContractTemp = _institutionContractTempRepository.Get(contractingPartyTempId);
if (institutionContractTemp == null)
var contractingPartyTemp = _contractingPartyTempRepository.Get(contractingPartyTempId);
if (contractingPartyTemp == null)
throw new NotFoundException("طرف حساب یافت نشد");
if (institutionContractTemp.RegistrationStatus == InstitutionContractTempStatus.Completed)
if (contractingPartyTemp.Status == ContractingPartyTempStatus.Completed)
throw new BadRequestException("شما قبلا ثبت نام خود را تکمیل نموده اید");
//ارسال لینک به طرف حساب
//Todo: implement the logic to send the agreement link to the contracting party
Random generator = new Random();
string verifyCode = generator.Next(1, 1000000).ToString("D6");
contractingPartyTemp.SetVerifyCode(verifyCode);
await _contractingPartyTempRepository.SaveChangesAsync();
await _smsService.SendVerifyCodeToClient(contractingPartyTemp.Phone, verifyCode);
return op.Succcedded();

View File

@@ -28,5 +28,8 @@ public class ContractingPartyTempMapping : IEntityTypeConfiguration<ContractingP
v => v.ToString(),
v => (Gender)Enum.Parse(typeof(Gender), v)).HasMaxLength(6);
builder.Property(x => x.DateOfBirth);
builder.Property(x => x.Status).HasConversion<string>().HasMaxLength(20);
builder.Property(x => x.VerifyCode).HasMaxLength(12);
}
}

View File

@@ -0,0 +1,53 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace CompanyManagment.EFCore.Migrations
{
/// <inheritdoc />
public partial class addverifyCodetocontractingpartytemp : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "Status",
table: "ContractingPartyTemp",
type: "nvarchar(20)",
maxLength: 20,
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<string>(
name: "VerifyCode",
table: "ContractingPartyTemp",
type: "nvarchar(12)",
maxLength: 12,
nullable: true);
migrationBuilder.AddColumn<DateTime>(
name: "VerifyCodeSentDateTime",
table: "ContractingPartyTemp",
type: "datetime2",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Status",
table: "ContractingPartyTemp");
migrationBuilder.DropColumn(
name: "VerifyCode",
table: "ContractingPartyTemp");
migrationBuilder.DropColumn(
name: "VerifyCodeSentDateTime",
table: "ContractingPartyTemp");
}
}
}

View File

@@ -5589,6 +5589,18 @@ namespace CompanyManagment.EFCore.Migrations
.HasMaxLength(35)
.HasColumnType("nvarchar(35)");
b.Property<string>("Status")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<string>("VerifyCode")
.HasMaxLength(12)
.HasColumnType("nvarchar(12)");
b.Property<DateTime>("VerifyCodeSentDateTime")
.HasColumnType("datetime2");
b.HasKey("id");
b.ToTable("ContractingPartyTemp", (string)null);

View File

@@ -3,6 +3,7 @@ using _0_Framework.Application;
using _0_Framework.Application.Enums;
using _0_Framework.Exceptions;
using AccountManagement.Application.Contracts.Account;
using Company.Domain.TemporaryClientRegistrationAgg;
using CompanyManagement.Infrastructure.Excel.InstitutionContract;
using CompanyManagment.App.Contracts.Employer;
using CompanyManagment.App.Contracts.InstitutionContract;
@@ -32,12 +33,13 @@ public class institutionContractController : AdminBaseController
private readonly IEmployerApplication _employerApplication;
private readonly IWorkshopApplication _workshopApplication;
private readonly ITemporaryClientRegistrationApplication _temporaryClientRegistration;
private readonly ITemporaryClientRegistrationApplication _clientRegistrationApplication;
public institutionContractController(IInstitutionContractApplication institutionContractApplication,
IPersonalContractingPartyApp contractingPartyApplication, IContactInfoApplication contactInfoApplication,
IAccountApplication accountApplication, IEmployerApplication employerApplication,
IWorkshopApplication workshopApplication, ITemporaryClientRegistrationApplication temporaryClientRegistration)
IWorkshopApplication workshopApplication, ITemporaryClientRegistrationApplication temporaryClientRegistration, ITemporaryClientRegistrationApplication clientRegistrationApplication)
{
_institutionContractApplication = institutionContractApplication;
_contractingPartyApplication = contractingPartyApplication;
@@ -46,6 +48,7 @@ public class institutionContractController : AdminBaseController
_employerApplication = employerApplication;
_workshopApplication = workshopApplication;
_temporaryClientRegistration = temporaryClientRegistration;
_clientRegistrationApplication = clientRegistrationApplication;
}
/// <summary>
@@ -679,7 +682,7 @@ public class institutionContractController : AdminBaseController
{
using var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);
var operationResult =
await _temporaryClientRegistration.CheckVerifyCodeIsTrue(request.ContractingPartyId, request.verifyCode);
await _clientRegistrationApplication.CheckVerifyCodeIsTrue(request.ContractingPartyId, request.verifyCode);
if (!operationResult.IsSuccedded)
return operationResult;
@@ -691,7 +694,6 @@ public class institutionContractController : AdminBaseController
return operationResult;
}
}
public class InstitutionPlanCalculatorResponse