private void SeedRoutes(iBDZDbContext db) { CSV csv = CSV.ReadFile(@"C:\Users\User\source\repos\iBDZ_v2\iBDZ.Seeding\Data\Routes.csv", "|", true); List <string> routeNames = db.Routes.Select(x => x.Name).ToList(); foreach (var line in csv.Data) { if (!routeNames.Contains(line["Name"])) { Route route = new Route() { Name = line["Name"] }; db.Routes.Add(route); string[] stations = line["Stations"].Split(','); for (int i = 0; i < stations.Length - 1; i++) { AddConnectingLine(db, stations[i], stations[i + 1]); AddRouteTrainStation(db, route, stations, i); } AddRouteTrainStation(db, route, stations, stations.Length - 1); } } }
public async Task SeedAsync(IServiceProvider serviceProvider) { iBDZDbContext db = (iBDZDbContext)serviceProvider.GetService(typeof(iBDZDbContext)); SeedTrainCarData(db); SeedLocomotivesData(db); await db.SaveChangesAsync(); }
private void AddRouteTrainStation(iBDZDbContext db, Route route, string[] stations, int i) { RouteTrainStation routeTrainStation = new RouteTrainStation() { TrainStationId = db.TrainStations.First(x => x.Name == stations[i]).Id, RouteId = route.Id, Order = (uint)i, }; db.RouteTrainStations.Add(routeTrainStation); }
private void AddConnectingLine(iBDZDbContext db, string station1, string station2) { ConnectingLine res = new ConnectingLine() { AverageSpeed = 1, Electrified = true, Node1 = db.TrainStations.First(x => x.Name == station1), Node2 = db.TrainStations.First(x => x.Name == station2) }; db.ConnectingLines.Add(res); }
public static void AddRoute(iBDZDbContext db, string StartStation, string MiddleStation, string EndStation) { db.Routes.Add(new Route { StartStation = StartStation, EndStation = EndStation, MiddleStation = MiddleStation }); db.Routes.Add(new Route { StartStation = EndStation, EndStation = StartStation, MiddleStation = MiddleStation }); }
private static void FillSeats(TrainCar car, iBDZDbContext db) { // Every train car is split into nine coupes... for (int i = 1; i <= 9; i++) { // ... however, compartment and sleeping cars have a different number of places available. if (car.Type == TrainCarType.Compartments) { // First and business class compartments have six seats. if (car.Class == TrainCarClass.First || car.Class == TrainCarClass.Business) { for (int j = 1; j <= 6; j++) { Seat s = new Seat { Coupe = i, SeatNumber = j, Reserver = null }; db.Seats.Add(s); car.Seats.Add(s); } } // Second class compartments have 8 seats; else if (car.Class == TrainCarClass.Second) { for (int j = 1; j <= 8; j++) { Seat s = new Seat { Coupe = i, SeatNumber = j, Reserver = null }; db.Seats.Add(s); car.Seats.Add(s); } } } // Sleeping cars have only three beds and the class of car doesn't dictate the quantity. else if (car.Type == TrainCarType.Beds) { for (int j = 1; j <= 3; j++) { Seat s = new Seat { Coupe = i, SeatNumber = j, Reserver = null }; db.Seats.Add(s); car.Seats.Add(s); } } } }
private void SeedTrainStations(iBDZDbContext db) { CSV csv = CSV.ReadFile(@"C:\Users\User\source\repos\iBDZ_v2\iBDZ.Seeding\Data\TrainStationData.csv", " | ", true); List <string> trainStationNames = db.TrainStations.Select(x => x.Name).ToList(); foreach (var line in csv.Data) { if (!trainStationNames.Contains(line["Name"])) { db.TrainStations.Add(new TrainStation() { Name = line["Name"], Latitude = double.Parse(line["Latitude"]), Longitude = double.Parse(line["Longitude"]), }); } } }
private void SeedTrainCarData(iBDZDbContext db) { CSV data = CSV.ReadFile( @"C:\Users\User\source\repos\iBDZ_v2\iBDZ.Seeding\Data\TrainCars.csv", "|", true ); List <string> trainCarNames = db.TrainCarData.Select(x => x.Name).ToList(); foreach (var line in data.Data) { TrainCarData trainCarData = ReadTrainCarData(line); if (!trainCarNames.Contains(trainCarData.Name)) { db.TrainCarData.Add(trainCarData); } } }
private void RepurposeTrains() { Random r = new Random(); var opts = new DbContextOptionsBuilder <iBDZDbContext>(); opts.UseSqlServer(configuration.GetConnectionString("DefaultConnection")); while (IsRunning) { using (iBDZDbContext db = new iBDZDbContext(opts.Options)) { List <Train> trains = db.Trains .Include(x => x.Route) .Include(x => x.Cars) .ThenInclude(x => x.Seats) .ThenInclude(x => x.Reserver) .Where(x => x.TimeOfArrival <= DateTime.Now) .ToList(); // NOTE: Throws if reverse version of train's route doesn't exist. // This only applies to manual Db seeding, the automatic system // always adds the reverse version of the route as well. trains.ForEach(x => { var availableRoutes = db.Routes.Where(y => y.StartStation == x.Route.EndStation).ToList(); x.TimeOfDeparture = DateTime.Now.AddHours(r.Next(24, 24 * 7)); x.TimeOfDeparture += new TimeSpan(0, 30 * r.Next(0, 1), 0); x.TimeOfArrival = x.TimeOfDeparture.AddMinutes(r.Next(7, 16) * 30); x.Route = availableRoutes.Skip(r.Next(0, availableRoutes.Count - 1)).First(); x.Cars.ForEach(y => y.Seats.ForEach(z => z.Reserver = null)); }); db.Trains.UpdateRange(trains); db.SaveChanges(); } Thread.Sleep(new TimeSpan(0, 30, 0)); } }
private static void FillTrainCars(int numCars, Train train, iBDZDbContext db) { RatioDistributor rd = new RatioDistributor(SecondClassDistrib, FirstClassDistrib, BedCarsDistrib, BusinessClassDistrib); var carDistributions = rd.DistributeInt(numCars); List <TrainCar> templates = new List <TrainCar>() { new TrainCar() { Type = TrainCarType.Compartments, Class = TrainCarClass.Second }, new TrainCar() { Type = TrainCarType.Compartments, Class = TrainCarClass.First }, new TrainCar() { Type = TrainCarType.Beds, Class = TrainCarClass.Business }, new TrainCar() { Type = TrainCarType.Compartments, Class = TrainCarClass.Business }, }; int templateIndex = 0; foreach (int distrib in carDistributions) { for (int i = 0; i < carDistributions[0]; i++) { TrainCar c = new TrainCar(templates[templateIndex]); FillSeats(c, db); train.Cars.Add(c); db.TrainCars.Add(c); } templateIndex++; } }
public static Train GenTrain(iBDZDbContext db) { Random r = new Random(); DateTime today = DateTime.Today; DateTime timeOfDep = today.AddHours(r.NextDouble() * 7 + 4); DateTime timeOfArrival = timeOfDep.AddMinutes(r.NextDouble() * 120 + 125); List <Route> routes = db.Routes.ToList(); Train t = new Train() { Route = routes.Skip(r.Next(0, db.Routes.Count() - 1)).First(), TimeOfDeparture = timeOfDep, TimeOfArrival = timeOfArrival, Type = (TrainType)Enum.GetValues(typeof(TrainType)).GetValue(r.Next(Enum.GetValues(typeof(TrainType)).Length)), }; t.RouteId = t.Route.Id; FillTrainCars(r.Next(MinNumCars, MaxNumCars), t, db); return(t); }
private void SeedLocomotivesData(iBDZDbContext db) { CSV data = CSV.ReadFile( @"C:\Users\User\source\repos\iBDZ_v2\iBDZ.Seeding\Data\Locomotives.csv", "|", true ); List <string> locomotiveNames = db.Locomotives.Select(x => x.Name).ToList(); foreach (var line in data.Data) { LocomotiveData locomotiveData = new LocomotiveData() { Name = line["Name"], Type = Enum.Parse <LocomotiveType>(line["Type"]) }; if (!locomotiveNames.Contains(locomotiveData.Name)) { db.Locomotives.Add(locomotiveData); } } }
public SeatService(iBDZDbContext db) { this.db = db; }
public RouteService(iBDZDbContext db) { this.db = db; }
public TrainService(iBDZDbContext db, IRouteService routeService) { this.db = db; this.routeService = routeService; }
public AdminService(iBDZDbContext db, UserManager <User> userManager, IUserService userService) { this.db = db; this.userManager = userManager; this.userService = userService; }
public MapService(iBDZDbContext db, IMapper mapper) { this.db = db; this.mapper = mapper; }
public UserService(iBDZDbContext db) { this.db = db; }