Files
monorepo/LCU.API.Internal.RepoApi/LCU.API.Internal.RepoApi.Repos/WebServices/NADA/CollateralValueService.cs
T
2026-03-13 09:27:34 -05:00

127 lines
4.7 KiB
C#

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];
}
}
}