Adding
This commit is contained in:
+127
@@ -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}®ion={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}®ion={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];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user