using DealerSelection.Api.Infrastructure.CustomerDetail; using DealerSelection.Api.Interface; using DealerSelection.Api.Models; using DealerSelection.Common.Exceptions; using Microsoft.Extensions.Logging; using System.Text.RegularExpressions; namespace DealerSelection.Api; public class YellowAIApi : IYellowAIApi { private readonly ILogger _logger; private IRepository CustomerDetailRepository { get; } public YellowAIApi(IRepository customerRepo, ILogger logger) { CustomerDetailRepository = customerRepo; _logger = logger; } public async Task UpdateSelectedDealer(CustomerDealerInfoRequest request) { if (IsValidData(request.MobileNumber, request.DealerCode, request.DealerName)) { var isDuplicate = await IsDuplicateMobileNumber(request.MobileNumber); if (!isDuplicate) { //Push to LSQ then make it complete // CustomerDealerInfoRequestDto dto = new CustomerDealerInfoRequestDto { BuId = request.BuId, RecordId = request.RecordId, MobileNumber = request.MobileNumber, ModelCode = request.ModelCode, ModelName = request.ModelName, ModelVariant = request.ModelVariant, DealerName = request.DealerName, DealerCode = request.DealerCode, PinCode = request.PinCode, Latitude = request.Latitude, Longitude = request.Longitude, DealerSelectionJobStatus = DealerSelectionJobStatus.Complete //Marking JobStatus Complete once we receive response from Yellow API }; await CustomerDetailRepository.UpdateDealerDetail(dto); } else _logger.LogWarning($"Duplicate MobileNumber exist. Data Details: {request.RequestDetail()}."); } else { _logger.LogWarning($"Invalid data. Data Details: {request.RequestDetail()}."); throw new ValidationException("Invalid data."); } } private static bool IsValidData(int mobileNumber, string dealerCode, string dealerName) { bool valid = Regex.IsMatch(mobileNumber.ToString(), @"^[0-9]{10}$"); if (valid && string.IsNullOrWhiteSpace(dealerCode) && string.IsNullOrWhiteSpace(dealerName)) valid = false; return valid; } private async Task IsDuplicateMobileNumber(int mobileNumber) { return await CustomerDetailRepository.IsDuplicateMobileNumber(mobileNumber); } }