using System; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Server.Services.Interfaces; namespace Server.Controllers.V2; [ApiController] [ApiExplorerSettings(GroupName = "v2")] [Route("/v2/[controller]")] public class TrainController : Controller { private IDataManager DataManager { get; } public TrainController(IDataManager dataManager) { this.DataManager = dataManager; } [HttpGet("{trainNumber}")] public async Task TrainInfo( [FromRoute] string trainNumber, [FromQuery] DateTimeOffset? date = null, [FromQuery] string? useYesterday = null ) { if (useYesterday != null && (new string[] { "y", "yes", "t", "true", "1" }).Contains(useYesterday?.Trim()?.ToLower())) { date ??= DateTimeOffset.Now.Subtract(TimeSpan.FromDays(1)); } var result = (await DataManager.FetchTrain(trainNumber, date ?? DateTimeOffset.Now))!; return new Models.V2.TrainScrapeResult { Date = result.Date, Number = result.Number, Operator = result.Operator, Rank = result.Rank, Route = { From = result.Groups[0].Route.From, To = result.Groups[0].Route.To, }, Stations = result.Groups[0].Stations.Select(station => new Models.V2.TrainStopDescription { Arrival = station.Arrival == null ? null : new Models.V2.TrainStopArrDep { ScheduleTime = station.Arrival.ScheduleTime.ToString("o"), Status = station.Arrival.Status == null ? null : new Models.V2.Status { Delay = station.Arrival.Status.Delay, Real = station.Arrival.Status.Real, }, }, Departure = station.Departure == null ? null : new Models.V2.TrainStopArrDep { ScheduleTime = station.Departure.ScheduleTime.ToString("o"), Status = station.Departure.Status == null ? null : new Models.V2.Status { Delay = station.Departure.Status.Delay, Real = station.Departure.Status.Real, }, }, Km = station.Km, Name = station.Name, Platform = station.Platform, StoppingTime = station.StoppingTime, }).ToList(), Status = result.Groups[0].Status == null ? null : new Models.V2.TrainStatus { Delay = result.Groups[0].Status!.Delay, State = result.Groups[0].Status!.State, Station = result.Groups[0].Status!.Station, }, }; } }