using Microsoft.AspNetCore.Mvc; using PartSource.Data.Models; using PartSource.Services; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Threading.Tasks; using NexpartMake = PartSource.Data.Nexpart.Make; using NexpartModel = PartSource.Data.Nexpart.Model; using NexpartEngine = PartSource.Data.Nexpart.Engine; using NexpartSubmodel = PartSource.Data.Nexpart.SubModel; namespace PartSource.Api.Controllers { /// /// This controller exists to enable legacy support for the old Nexpart-based vehicle lookup. /// [Route("vehicles")] [Route("v1/vehicles")] [ApiController] [ApiExplorerSettings(GroupName = "v1")] public class LegacyVehiclesController : BaseNexpartController { private readonly VehicleService _vehicleService; public LegacyVehiclesController(VehicleService vehicleService) { _vehicleService = vehicleService; } [HttpGet] [Route("makes")] public async Task GetMakes() { IList vehicleMakes = await _vehicleService.GetMakes(); IList nexpartMakes = new List(); foreach (VehicleMake make in vehicleMakes) { nexpartMakes.Add(new NexpartMake { Id = make.MakeId, Value = make.Name.Trim() }); } return Ok(new { data = new { make = nexpartMakes } }); } [HttpGet] [Route("models/makeid/{makeId}/modelyear/{year}")] public async Task GetModels(int makeId, int year) { IList vehicleModels = await _vehicleService.GetModels(makeId, year); IList nexpartModels = new List(); foreach (VehicleModel model in vehicleModels) { nexpartModels.Add(new NexpartModel { Id = model.ModelId, Value = model.Name.Trim() }); } return Ok(new { data = new[] { new { model = nexpartModels } } }); } [HttpGet] [Route("basevehicle/makeid/{makeId}/modelid/{modelId}/modelyear/{year}")] [Route("basevehicles/makeid/{makeId}/modelid/{modelId}/modelyear/{year}")] public async Task GetBaseVehicle(int makeId, int modelId, int year) { BaseVehicle baseVehicle = await _vehicleService.GetBaseVehicle(makeId, modelId, year); return Ok(new { data = baseVehicle }); } [HttpGet] [Route("engines/basevehicleid/{baseVehicleId}")] [Route("engines/basevehicleid/{baseVehicleId}/submodelid/{subModelId}")] public async Task GetEngines(int baseVehicleId, int? submodelId = null) { IList nexpartEngines = new List(); IList engines = submodelId == null ? await _vehicleService.GetEngines(baseVehicleId) : await _vehicleService.GetEngines(baseVehicleId, (int)submodelId); foreach(Engine engine in engines) { nexpartEngines.Add(new NexpartEngine { Id = engine.EngineConfigId, Value = engine.Description.Trim() }); } return Ok(new { data = new { engine = nexpartEngines } }); } [HttpGet] [Route("trim/makeid/{makeId}/modelid/{modelId}/modelyear/{year}")] [Route("submodels/makeid/{makeId}/modelid/{modelId}/modelyear/{year}")] public async Task GetSubmodels(int makeId, int modelId, int year) { IList submodels = await _vehicleService.GetSubmodels(makeId, modelId, year); IList nexpartSubmodels = new List(); foreach (Submodel submodel in submodels) { nexpartSubmodels.Add(new NexpartSubmodel { Id = submodel.SubmodelId.ToString(), Description = submodel.Name.Trim() }); } return Ok(new { data = new { subModel = nexpartSubmodels } }); } [HttpGet] [Route("detail/basevehicleid/{baseVehicleId}/submodelid/{submodelId}/engineconfigid/{engineConfigId}")] public async Task GetVehicleDetail(int baseVehicleId, int submodelId, int engineConfigId) { Vehicle vehicle = await _vehicleService.GetVehicle(baseVehicleId, engineConfigId, submodelId); return Ok(new { data = vehicle }); } [HttpGet] [Route("types")] public ActionResult GetVehicleTypes() { return new StatusCodeResult((int)HttpStatusCode.Gone); } [HttpGet] [Route("makes/vehicletypeid/{vehicleTypeId}")] public ActionResult GetMakes(int vehicleTypeId) { return new StatusCodeResult((int)HttpStatusCode.Gone); } [HttpGet] [Route("models/makeid/{makeId}/modelyear/{year}/vehicletypeid/{vehicleTypeId}")] public ActionResult GetModels(int makeId, int year, int vehicleTypeId) { return new StatusCodeResult((int)HttpStatusCode.Gone); } } }