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 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 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 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 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 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 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----------------------------------// } }