This commit is contained in:
Zeeshaun
2026-03-13 09:27:34 -05:00
parent 256f579489
commit a675c5f5b0
381 changed files with 20992 additions and 0 deletions
@@ -0,0 +1,49 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace LCU.API.Internal.RepoApi.Repos.WebServices.NADA
{
public class CollateralValuation
{
[Required]
public int Id { get; set; }
public int Year { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public string Uid { get; set; }
public string UcgVehicleId { get; set; }
public DateTime? LookupDate { get; set; }
public string Mileage_Hours { get; set; }
public int? MakeCode { get; set; }
public string MakeDescription { get; set; }
public int? SeriesCode { get; set; }
public string SeriesDescription { get; set; }
public int? BodyCode { get; set; }
public string BodyDescription { get; set; }
public int? Weight { get; set; }
public decimal? Msrp { get; set; }
public int? AveMileage { get; set; }
public decimal? MileageAdjustment { get; set; }
public bool AuctionInfoUnavailable { get; set; }
public int LowAdjustedAuctionValue { get; set; }
public int AverageAdjustedAuctionValue { get; set; }
public int HighAdjustedAuctionValue { get; set; }
public string DateRange { get; set; }
public decimal Loan { get; set; }
public decimal LoanPlusVinAcc { get; set; }
public decimal LoanPlusVinAccMileage { get; set; }
public decimal Retail { get; set; }
public decimal RetailPlusVinAcc { get; set; }
public decimal RetailPlusVinAccMileage { get; set; }
public decimal AvgTradeIn { get; set; }
public decimal AvgTradeInPlusVinAcc { get; set; }
public decimal AvgTradeInPlusVinAccMileage { get; set; }
public decimal RoughTradeIn { get; set; }
public decimal RoughTradeInPlusVinAcc { get; set; }
public decimal RoughTradeInPlusVinAccMileage { get; set; }
public decimal TradeIn { get; set; }
public decimal TradeInPlusVinAcc { get; set; }
public decimal TradeInPlusVinAccMileage { get; set; }
}
}
@@ -0,0 +1,127 @@
using System;
using JdpVehicle;
using Serilog;
using LCU.API.Internal.RepoApi.Repos.Utilities;
using Newtonsoft.Json;
using LCU.API.Internal.RepoApi.Repos.Models.Results;
namespace LCU.API.Internal.RepoApi.Repos.WebServices.NADA
{
public class CollateralValueService : ICollateralValueService
{
private readonly CollateralValueServiceConfig _config;
private readonly IClientHelpers _clientHelpers;
public CollateralValueService(CollateralValueServiceConfig config, ClientHelpers clientHelpers)
{
_config = config;
_clientHelpers = clientHelpers;
}
private readonly VehicleTypes[] _nadaVehicleType =
{
VehicleTypes.UsedCar,
VehicleTypes.CommercialTruck
};
public CollateralValuation GetCollateralValue(string vin,
int mileage,
int vehicleTypeKey)
{
var valueResponse = this.GetVehicleData(_config.Region, _config.Period, vin, vehicleTypeKey, mileage);
if (valueResponse != null)
{
var autoVehicle = new CollateralValuation()
{
Make = valueResponse.Make,
Model = valueResponse.Body + " " + valueResponse.Model,
Year = valueResponse.Modelyear,
UcgVehicleId = valueResponse.Ucgvehicleid.ToString(), //ucgvehicleid is the new ID and not 1:1 to legacy UID
SeriesDescription = valueResponse.Model,
BodyDescription = valueResponse.Body,
Weight = String.IsNullOrWhiteSpace(valueResponse.Curbweight) ? 0 : Int32.Parse(valueResponse.Curbweight),
Msrp = String.IsNullOrWhiteSpace(valueResponse.Basemsrp) ? 0 : Int32.Parse(valueResponse.Basemsrp),
AveMileage = valueResponse.Averagemileage,
MileageAdjustment = valueResponse.Mileageadjustment,
LookupDate = DateTime.Now,
Loan = valueResponse.Baseloan,
LoanPlusVinAccMileage = valueResponse.Adjustedloan,
Retail = valueResponse.Basecleanretail,
RetailPlusVinAccMileage = valueResponse.Adjustedcleanretail,
AvgTradeIn = valueResponse.Baseaveragetrade,
AvgTradeInPlusVinAccMileage = valueResponse.Adjustedaveragetrade,
RoughTradeIn = valueResponse.Baseroughtrade,
RoughTradeInPlusVinAccMileage = valueResponse.Adjustedroughtrade,
TradeIn = valueResponse.Basecleantrade,
TradeInPlusVinAccMileage = valueResponse.Adjustedcleantrade,
AuctionInfoUnavailable = true
};
//Try catch to prevent failure if no auction values available
try
{
var auctionResponse = this.GetAuctionValues(_config.Period, valueResponse.Ucgvehicleid, _config.Region, vehicleTypeKey, vin, mileage);
if (auctionResponse != null)
{
autoVehicle.AuctionInfoUnavailable = false;
autoVehicle.AverageAdjustedAuctionValue = auctionResponse.AvgAuction;
autoVehicle.HighAdjustedAuctionValue = auctionResponse.HighAuction;
autoVehicle.LowAdjustedAuctionValue = auctionResponse.LowAuction;
autoVehicle.DateRange = auctionResponse.DateRange;
}
}
catch (Exception ex)
{
Log.Error(ex, "Failed to Retreive Auction Values in CollateralValueService");
}
return autoVehicle;
}
return null;
}
private VehicleData GetVehicleData(int region, int period, string vin, int vehicleTypeKey, int mileage)
{
var newURL = string.Format(_config.DefaultVehicleAndValuesByVinEndpoint + "?period={0}&vin={1}&region={2}&mileage={3}",
period, vin, region, mileage);
var request = _clientHelpers.CreateGetHttpRequestMessage(newURL, _config.ApiKey);
var response = _clientHelpers.SendHttpRequestMessage(request);
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Request for vehicle data for vehicle with VIN {vin} was unsuccessful.");
}
var content = response.Content.ReadAsStringAsync().Result;
var result = JsonConvert.DeserializeObject<VehicleInformation>(content);
return result.Result[0];
}
private AuctionData GetAuctionValues(int period, int ucgVehicleId, int region, int vehicleTypeKey, string vin, int mileage)
{
var newURL = string.Format(_config.WeeklyAuctionValuesByVehicleIdEndPoint + "?period={0}&vehicletype={1}&vin={2}&ucgvehicleid={3}&region={4}&mileage={5}",
period, this._nadaVehicleType[vehicleTypeKey], vin, ucgVehicleId, region, mileage);
var request = _clientHelpers.CreateGetHttpRequestMessage(newURL, _config.ApiKey);
var response = _clientHelpers.SendHttpRequestMessage(request);
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Request for auction data for vehicle with VIN {vin} was unsuccessful.");
}
var content = response.Content.ReadAsStringAsync().Result;
var result = JsonConvert.DeserializeObject<AuctionInformation>(content);
return result.Result[0];
}
}
}
@@ -0,0 +1,16 @@
namespace LCU.API.Internal.RepoApi.Repos.WebServices.NADA
{
public class CollateralValueServiceConfig
{
public string Username { get; set; }
public string Password { get; set; }
public string LoginEndpoint { get; set; }
public string VehicleEndpoint { get; set; }
public string DefaultVehicleAndValuesByVinEndpoint { get; set; }
public string WeeklyAuctionValuesByVehicleIdEndPoint { get; set; }
public int Region { get; set; }
public int Period { get; set; }
public string ApiKey { get; set; }
}
}
@@ -0,0 +1,9 @@
namespace LCU.API.Internal.RepoApi.Repos.WebServices.NADA
{
public interface ICollateralValueService
{
CollateralValuation GetCollateralValue(string vin,
int mileage,
int vehicleTypeKey);
}
}