merchant onboarding process completed

This commit is contained in:
2025-08-06 16:11:02 +05:30
parent f90d1f0c57
commit 1a27e282e3
22 changed files with 768 additions and 19 deletions

View File

@ -0,0 +1,165 @@
using System.Text.Json;
using Singer_Hexdive.Enums;
using Singer_Hexdive.Interfaces.RepositoryInterfaces;
using Singer_Hexdive.Interfaces.ServiceInterfaces;
using Singer_Hexdive.Models;
using Singer_Hexdive.Validations;
namespace Singer_Hexdive.Services
{
public class MerchantService : BaseMerchantService
{
private readonly IMerchantRepository _merchantRepository;
public MerchantService(IMerchantRepository merchantRepository)
{
_merchantRepository = merchantRepository;
}
//-------------------------------------------Merchant_Onboarding_Start----------------------------------//
public override async Task<object> GetM_PersonalDetails(object payload)
{
var data = DeserializePayload(payload);
int merchantId = FieldValidators.EnsureNotLessZero(data["MerchantId"].GetInt32(), "MerchantId");
var result = await _merchantRepository.GetM_PersonalDetailsAsync(merchantId);
return result;
}
public override async Task<object> PostM_PersonalDetails(object payload)
{
var data = DeserializePayload(payload);
int approveStatus = await _merchantRepository.CheckApprovedStatus(data["MechantId"].GetInt32(), "MerchantPersonalDetail");
if (approveStatus == 2)
{
var merchantPersonalDetail = new MerchantPersonalDetail
{
MerchantName = FieldValidators.EnsureNotNullOrEmpty(data["MerchantName"].GetString(), "MerchantName"),
FK_IdType = FieldValidators.EnsureNotLessZero(data["FK_IdType"].GetInt32(), "FK_IdType"),
M_IdNumber = FieldValidators.EnsureNotNullOrEmpty(data["M_IdNumber"].GetString(), "M_IdNumber"),
M_Email = FieldValidators.EnsureValidEmail(data["M_Email"].GetString(), "M_Email"),
M_Mobile_Primary = FieldValidators.IsValidPhoneNumber(data["M_Mobile_Primary"].GetString(), "M_Mobile_Primary"),
M_Mobile_Secondary = FieldValidators.IsValidPhoneNumber(data["M_Mobile_Secondary"].GetString(), "M_Mobile_Secondary"),
M_Address = FieldValidators.EnsureNotNullOrEmpty(data["M_Address"].GetString(), "M_Address"),
M_City = FieldValidators.EnsureNotNullOrEmpty(data["M_City"].GetString(), "M_City"),
M_PostalCode = FieldValidators.EnsureNotLessZero(data["M_PostalCode"].GetInt32(), "M_PostalCode"),
OnboardDate = data["OnboardDate"].GetDateTime(),
};
var result = await _merchantRepository.PostM_PersonalDetailsAsync(merchantPersonalDetail);
return result;
}
else
{
throw new InvalidOperationException("Merchant is not approved for onboarding.");
}
}
public override async Task<object> GetM_BusinessDetails(object payload)
{
var data = DeserializePayload(payload);
int merchantId = FieldValidators.EnsureNotLessZero(data["MerchantId"].GetInt32(), "MerchantId");
var result = await _merchantRepository.GetM_PersonalDetailsAsync(merchantId);
return result;
}
public override async Task<object> PostM_BusinessDetails(object payload)
{
var data = DeserializePayload(payload);
int approveStatus = await _merchantRepository.CheckApprovedStatus(data["MechantId"].GetInt32(), "MerchantBusinessDetail");
if (approveStatus == 2)
{
var merchantBusinessDetail = new MerchantBusinessDetail
{
FK_MechantId = FieldValidators.EnsureNotLessZero(data["MechantId"].GetInt32(), "MechantId"),
BusinessName = FieldValidators.EnsureNotNullOrEmpty(data["BusinessName"].GetString(), "BusinessName"),
BusinessDoingName = FieldValidators.EnsureNotNullOrEmpty(data["BusinessDoingName"].GetString(), "BusinessDoingName"),
BusinessRegNum = FieldValidators.EnsureNotNullOrEmpty(data["BusinessRegNum"].GetString(), "BusinessRegNum"),
BusinessIncomeTaxNum = FieldValidators.EnsureNotNullOrEmpty(data["BusinessIncomeTaxNum"].GetString(), "BusinessIncomeTaxNum"),
BusinessRegDate = data["BusinessRegDate"].GetDateTime(),
BusinessIncomeDate = data["BusinessIncomeDate"].GetDateTime(),
BusinessAddress = FieldValidators.EnsureNotNullOrEmpty(data["BusinessAddress"].GetString(), "BusinessAddress"),
BusinessCity = FieldValidators.EnsureNotNullOrEmpty(data["BusinessCity"].GetString(), "BusinessCity"),
PostalCode = FieldValidators.EnsureNotLessZero(data["PostalCode"].GetInt32(), "PostalCode"),
};
var result = (MerchantBusinessDetail)await _merchantRepository.PostM_BusinessDetailsAsync(merchantBusinessDetail);
if (data["ShareHolders"].ValueKind == JsonValueKind.Array)
{
foreach (var shareHolder in data["ShareHolders"].EnumerateArray())
{
var shareHolderDetail = new MerchantShareHolders
{
FK_MBusinessId = result.Id,
S_FullName = FieldValidators.EnsureNotNullOrEmpty(shareHolder.GetProperty("S_FullName").GetString(), "S_FullName"),
S_IdNumber = FieldValidators.EnsureNotNullOrEmpty(shareHolder.GetProperty("S_IdNumber").GetString(), "S_IdNumber"),
S_MobileNumber = FieldValidators.IsValidPhoneNumber(shareHolder.GetProperty("S_MobileNumber").GetString(), "S_MobileNumber"),
S_Address = FieldValidators.EnsureNotNullOrEmpty(shareHolder.GetProperty("S_Address").GetString(), "S_Address"),
S_SharePercentage = shareHolder.GetProperty("S_SharePercentage").GetDecimal(),
Bithday = shareHolder.GetProperty("Bithday").GetDateTime(),
};
await _merchantRepository.PostM_ShareHolderDetailsAsync(shareHolderDetail);
}
}
if (data["Directors"].ValueKind == JsonValueKind.Array)
{
foreach (var directors in data["Directors"].EnumerateArray())
{
var DirectorsDetail = new MerchantDirectors
{
FK_MBusinessId = result.Id,
D_FullName = FieldValidators.EnsureNotNullOrEmpty(directors.GetProperty("D_FullName").GetString(), "D_FullName"),
D_IdNumber = FieldValidators.EnsureNotNullOrEmpty(directors.GetProperty("D_IdNumber").GetString(), "D_IdNumber"),
D_MobileNumber = FieldValidators.IsValidPhoneNumber(directors.GetProperty("D_MobileNumber").GetString(), "D_MobileNumber"),
D_Address = FieldValidators.EnsureNotNullOrEmpty(directors.GetProperty("D_Address").GetString(), "D_Address"),
Birthday = directors.GetProperty("D_Bithday").GetDateTime(),
};
await _merchantRepository.PostM_DiretorDetailsAsync(DirectorsDetail);
}
}
return result;
}
else
{
throw new InvalidOperationException("Merchant is not approved for onboarding.");
}
}
public override async Task<object> GetM_BankDetails(object payload)
{
var data = DeserializePayload(payload);
int merchantId = FieldValidators.EnsureNotLessZero(data["MerchantId"].GetInt32(), "MerchantId");
var result = await _merchantRepository.GetM_BankDetailsAsync(merchantId);
return result;
}
public override async Task<object> PostM_BankDetails(object payload)
{
var data = DeserializePayload(payload);
int approveStatus = await _merchantRepository.CheckApprovedStatus(data["MechantId"].GetInt32(), "MerchantBankDetail");
if (approveStatus == 2)
{
var merchantBankDetails = new MerchantBankDetails
{
FK_MId = FieldValidators.EnsureNotLessZero(data["MechantId"].GetInt32(), "MechantId"),
CurrencyCode = FieldValidators.EnsureNotNullOrEmpty(data["CurrencyCode"].GetString(), "CurrencyCode"),
BankAccountTypes = (BankAccountTypes)FieldValidators.EnsureNotLessZero(data["BankAccountTypes"].GetInt32(), "BankAccountTypes"),
M_BankName = FieldValidators.EnsureNotNullOrEmpty(data["M_BankName"].GetString(), "M_BankName"),
M_BankBranchName = FieldValidators.EnsureNotNullOrEmpty(data["M_BankBranchName"].GetString(), "M_BankBranchName"),
M_BankAccNum = FieldValidators.EnsureNotLessZero(data["M_BankAccNum"].GetInt32(), "M_BankAccNum"),
M_BankAccHolderName = FieldValidators.EnsureNotNullOrEmpty(data["M_BankAccHolderName"].GetString(), "M_BankAccHolderName"),
M_BankHolderIdNum = FieldValidators.EnsureNotNullOrEmpty(data["M_BankHolderIdNum"].GetString(), "M_BankHolderIdNum"),
M_PhoneNum = FieldValidators.IsValidPhoneNumber(data["M_PhoneNum"].GetString(), "M_PhoneNum")
};
var result = await _merchantRepository.PostM_BankDetailsAsync(merchantBankDetails);
return result;
}
else
{
throw new InvalidOperationException("Merchant is not approved for onboarding.");
}
}
//-------------------------------------------Merchant_Onboarding_End----------------------------------//
}
}