public bool TripExists(int tripId) { using (var context = new BusTicketSystemContext()) { return(context.Trips.Any(t => t.Id == tripId)); } }
public bool BusCompanyExists(string busCompanyName) { using (var context = new BusTicketSystemContext()) { return(context.BusCompanies.Any(b => b.Name == busCompanyName)); } }
public bool BusStationExsits(int stationId) { using (var context = new BusTicketSystemContext()) { return(context.BusStations.Any(s => s.Id == stationId)); } }
public bool BusCompanyExists(int busCompanyId) { using (var context = new BusTicketSystemContext()) { return(context.BusCompanies.Any(b => b.Id == busCompanyId)); } }
public void Buy(int customerId, int tripId, decimal price, string seatNumber) { using (var context = new BusTicketSystemContext()) { Customer customer = context.Customers.FirstOrDefault(c => c.Id == customerId); Trip trip = context.Trips.FirstOrDefault(t => t.Id == tripId); Ticket ticket = new Ticket { Customer = customer, Trip = trip, Price = price, Seat = seatNumber }; customer.BankAccount.Balance -= price; context.Tickets.Add(ticket); context.SaveChanges(); Console.WriteLine($"Customer {customer.Fullname} bought a ticket for trip {tripId} for {price:F2} on seat {seatNumber}"); } }
public void ChangeStatus(int tripId, Status status) { using (var context = new BusTicketSystemContext()) { Trip trip = context.Trips.FirstOrDefault(t => t.Id == tripId); Status oldStatus = trip.Status; trip.Status = status; int ticketCount = 0; ticketCount = context.Tickets.Where(t => t.TripId == tripId).Count(); if (status == Status.arrived) { ArrivedTrip arTrip = new ArrivedTrip { ActualArrivalTime = DateTime.Now, OriginStation = trip.OriginStation, DestinationStation = trip.DestinationStation, PassengerCount = ticketCount }; context.ArrivedTrips.Add(arTrip); } context.SaveChanges(); Console.WriteLine($"Trip from {trip.OriginStation.Town.Name} to {trip.DestinationStation.Town.Name} on {trip.DepartureTime}"); Console.WriteLine($"Status changed from {oldStatus} to {trip.Status}"); } }
public bool CustomerExists(int customerId) { using (var context = new BusTicketSystemContext()) { return(context.Customers.Any(c => c.Id == customerId)); } }
public static void ResetDatabase() { using (var db = new BusTicketSystemContext()) { db.Database.EnsureDeleted(); db.Database.EnsureCreated(); } }
public static void ResetDatabase(BusTicketSystemContext context) { context.Database.EnsureDeleted(); context.Database.Migrate(); Seed(context); }
public string Execute(string[] data) { if (data.Length != 4) { throw new InvalidOperationException("Invalid parameters!"); } int customerId = int.Parse(data[0]); int tripId = int.Parse(data[1]); decimal price = decimal.Parse(data[2]); string seat = data[3]; string result = string.Empty; using (var db = new BusTicketSystemContext()) { var customer = db.Customers.Where(c => c.Id == customerId).Include(c => c.BankAccount).SingleOrDefault(); if (customer == null || !db.Trips.Any(t => t.Id == tripId)) { throw new InvalidOperationException("There is no such customer or trip!"); } if (db.Tickets.Any(t => t.CustomerId == customerId && t.TripId == tripId)) { throw new ArgumentException($"You have already bought ticket for trip {tripId}"); } if (price <= 0) { throw new ArgumentException("Invalid price!"); } if (customer.BankAccount.Balance - price < 0) { throw new ArgumentException("Insufficient funds!"); } customer.BankAccount.Balance -= price; var ticket = new Ticket() { CustomerId = customerId, Price = price, Seat = seat, TripId = tripId }; db.Tickets.Add(ticket); db.SaveChanges(); result = $"Customer {customer.FirstName} {customer.LastName} bought ticket for trip {tripId} for ${price} on seat {seat}"; } return(result); }
private static void ResetDatabase() { using (var context = new BusTicketSystemContext()) { context.Database.EnsureDeleted(); context.Database.Migrate(); Seed(context); } }
public string Execute(string[] data) { if (data.Length != 1) { throw new InvalidOperationException("Invalid parameters!"); } int busId = int.Parse(data[0]); var sb = new StringBuilder(); using (var db = new BusTicketSystemContext()) { var busStation = db.BusStations .Where(b => b.Id == busId) .Select(b => new { StationName = b.Name, Town = b.Town.Name, Arrivals = b.Arrivals.Select(a => new { OriginStation = a.OriginBusStation.Name, ArrivalTime = a.ArrivalTime, Status = a.Status }).ToList(), Departures = b.Departures.Select(a => new { DestinationStation = a.DestinationBusStation.Name, DepartureTime = a.DepartureTime, Status = a.Status }).ToList() }).SingleOrDefault(); if (busStation == null) { throw new ArgumentException("There is no such Bus Station!"); } sb.AppendLine($"{busStation.StationName}, {busStation.Town}"); var arrivals = busStation.Arrivals .Select(a => $"From {a.OriginStation} | Arrive at: {a.ArrivalTime} | Status: {a.Status}") .ToList(); sb.AppendLine($"Arrivals:{Environment.NewLine}{string.Join(Environment.NewLine, arrivals)}"); var departures = busStation.Departures .Select(d => $"To {d.DestinationStation} | Depart at: {d.DepartureTime} | Status {d.Status}") .ToList(); sb.AppendLine($"Departures:{Environment.NewLine}{string.Join(Environment.NewLine, departures)}"); } return(sb.ToString()); }
public static void Main() { using (var context = new BusTicketSystemContext()) { DataGenerator.ResetDatabase(context); } CommandDispatcher commandDispatcher = new CommandDispatcher(); Engine engine = new Engine(commandDispatcher); engine.Run(); }
private void InitialSeed(BusTicketSystemContext busTicketSystemContext) { SeedTowns(); SeedBusStations(); SeedBusCompanies(); //seed for customers and bankaccount don't work because of one-to-one relationship ef core bug report - make relation one to many SeedCustomers(); SeedBankAccounts(); SeedReviews(); SeedTrips(); SeedTickets(); Console.WriteLine("Successfull seed!"); }
static void Main(string[] args) { var db = new BusTicketSystemContext(); db.Database.EnsureDeleted(); db.Database.EnsureCreated(); IServiceProvider serviceProvider = ConfigureServices(); IDatabaseService databaseInitilizer = serviceProvider.GetService <IDatabaseService>(); ICommandDispatcher commandDispatcher = serviceProvider.GetService <ICommandDispatcher>(); Engine engine = new Engine(commandDispatcher, databaseInitilizer); engine.Run(); }
public bool TripHasSameStatus(int tripId, Status status) { using (var context = new BusTicketSystemContext()) { Trip trip = context.Trips.FirstOrDefault(t => t.Id == tripId); if (trip.Status == status) { return(true); } else { return(false); } } }
public bool CustomerHasEnoughMoney(int customerId, decimal price) { using (var context = new BusTicketSystemContext()) { decimal customerBalance = context.Customers.FirstOrDefault(c => c.Id == customerId).BankAccount.Balance; if (customerBalance - price >= 0) { return(true); } else { return(false); } } }
public string Execute(string[] data) { if (data.Length < 4) { throw new InvalidOperationException("Invalid parameters!"); } int customerId = int.Parse(data[0]); double grade = double.Parse(data[1]); string busCompany = data[2]; string content = string.Join(" ", data.Skip(3).ToArray()); string result = string.Empty; using (var db = new BusTicketSystemContext()) { if (!db.Customers.Any(c => c.Id == customerId) || !db.BusCompanies.Any(b => b.Name == busCompany)) { throw new ArgumentException("Invalid Custumer or Bus Company!"); } if (grade < 1 || grade > 10) { throw new ArgumentException("Grade can be between 1 and 10"); } var review = new Review() { BusCompanyId = db.BusCompanies.SingleOrDefault(b => b.Name == busCompany).Id, Content = content, CustomerId = customerId, Grade = grade }; db.Customers.Find(customerId).Reviews.Add(review); db.SaveChanges(); string customerFullName = db.Customers.Find(customerId).FirstName + " " + db.Customers.Find(customerId).LastName; result = $"{customerFullName} review was succesfully published"; } return(result); }
// <busStationId> internal static string Execute(string[] data) { var busStationId = int.Parse(data[0]); var busStationInfo = new StringBuilder(); using (var context = new BusTicketSystemContext()) { var info = context.BusStations .Where(bs => bs.BusStationId == busStationId) .Include(bs => bs.Town) .Include(bs => bs.DepartureTrips) .Include(bs => bs.ArrivalTrips) .ToList(); foreach (var bs in info) { busStationInfo.AppendLine($"{bs.Name}, {bs.Town.Name}"); busStationInfo.AppendLine("Arrivals:"); foreach (var a in bs.ArrivalTrips) { busStationInfo.AppendLine ($"From {a.OriginBusStation.Name} " + $"| Arrive at: {a.ArrivalTime} " + $"| Status: {a.Status}"); } busStationInfo.AppendLine("Departures:"); foreach (var d in bs.DepartureTrips) { busStationInfo.AppendLine ($"From {d.DestinationBusStation.Name} " + $"| Arrive at: {d.ArrivalTime} " + $"| Status: {d.Status}"); } } return(busStationInfo.ToString()); } }
public void PrintCompanyReviews(int busCompanyId) { using (BusTicketSystemContext context = new BusTicketSystemContext()) { BusCompany busCompany = context.BusCompanies.FirstOrDefault(b => b.Id == busCompanyId); if (busCompany.Reviews.Count == 0) { Console.WriteLine($"{busCompany.Name} has no reviews yet!"); } else { var reviews = busCompany.Reviews.ToList(); foreach (var review in reviews) { Console.WriteLine($"Id: {review.Id}| Grade: {review.Grade:F2} | PublishDate: {review.PublishDate}"); Console.WriteLine($"Customer: {review.Customer.Fullname} \n{review.Content}"); } } } }
public string DispatchCommand(string[] commandParameters) { var commandName = ChangeCommandName(commandParameters[0]); var commandArgs = commandParameters.Skip(1).ToArray(); var assembly = Assembly.GetExecutingAssembly(); var commandTypes = assembly.GetTypes() .Where(t => t.GetInterfaces().Contains(typeof(ICommand))) .ToArray(); var commandType = commandTypes .SingleOrDefault(t => t.Name == $"{commandName}Command"); if (commandType == null) { throw new InvalidOperationException("Invalid command!"); } var constructor = commandType.GetConstructors().First(); var constructorParameters = constructor.GetParameters().ToArray(); ICommand command; if (constructorParameters.Count() != 0) { var context = new BusTicketSystemContext(); command = (ICommand)constructor.Invoke(new object[] { context }); } else { command = (ICommand)constructor.Invoke(new object[0]); } return(command.Execute(commandArgs)); }
public void Publish(int customerId, double grade, string busCompanyName, string content) { using (BusTicketSystemContext context = new BusTicketSystemContext()) { Customer customer = context.Customers.FirstOrDefault(c => c.Id == customerId); BusCompany busCompany = context.BusCompanies.FirstOrDefault(b => b.Name == busCompanyName); Review review = new Review { BusCompany = busCompany, Customer = customer, Grade = grade, Content = content, PublishDate = DateTime.Now }; context.Reviews.Add(review); context.SaveChanges(); Console.WriteLine($"Customer {customer.Fullname} published a review for company {busCompanyName}"); } }
public virtual void BusStationInfo(int stationId) { using (var context = new BusTicketSystemContext()) { var station = context.BusStations.FirstOrDefault(s => s.Id == stationId); Console.WriteLine($"{station.Name}, {station.Town.Name}"); var arrivals = station.TripsArriving.ToList(); var departures = station.TripsDeparting.ToList(); Console.WriteLine("Arrivals:"); foreach (var arrival in arrivals) { Console.WriteLine($"From {arrival.OriginStation.Name} | Arrive at: {arrival.ArrivalTime} | Status: {arrival.Status}"); } Console.WriteLine("Departures:"); foreach (var departure in departures) { Console.WriteLine($"To {departure.DestinationStation.Name} | Depart at: {departure.DepartureTime} | Status: {departure.Status}"); } } }
public string Execute(string[] data) { if (data.Length != 1) { throw new InvalidOperationException("Invalid parameters!"); } int busCompanyId = int.Parse(data[0]); string printText = string.Empty; using (var db = new BusTicketSystemContext()) { if (!db.BusCompanies.Any(c => c.Id == busCompanyId)) { throw new ArgumentException("There is no such Bus Company!"); } var result = db.Reviews.Where(r => r.BusCompanyId == busCompanyId) .Select(r => new { r.Id, r.Grade, PublishingDateTime = r.PublishingDateTime, r.Content, FullName = r.Customer.FirstName + " " + r.Customer.LastName }).ToArray(); var formatResult = result .Select(r => $"{r.Id} {r.Grade} {r.PublishingDateTime}{Environment.NewLine}{r.FullName}{Environment.NewLine}{r.Content}") .ToArray(); printText = string.Join(Environment.NewLine, formatResult); } return(printText); }
public BuyTicketCommand(BusTicketSystemContext context) { this.context = context; }
public ReviewService(BusTicketSystemContext db) { this.db = db; }
public DatabaseInitializeService(BusTicketSystemContext db) { this.db = db; }
public ChangeTripStatusCommand(BusTicketSystemContext context) { this.context = context; }
public CustomerService(BusTicketSystemContext context) { this.context = context; }
public string Execute(string[] data) { if (data.Length != 2) { throw new InvalidOperationException("Invalid parameters!"); } int tripId = int.Parse(data[0]); string newStatus = data[1]; var result = new StringBuilder(); using (var db = new BusTicketSystemContext()) { var trip = db.Trips .Include(t => t.OriginBusStation) .ThenInclude(s => s.Town) .Include(t => t.DestinationBusStation) .ThenInclude(s => s.Town) .Include(t => t.Tickets) .SingleOrDefault(t => t.Id == tripId); if (trip == null) { throw new InvalidOperationException("There is no such trip!"); } var statusNames = Enum.GetNames(typeof(Status)).ToList(); if (!statusNames.Contains(newStatus)) { throw new InvalidOperationException("Invalid status name!"); } string oldStatus = trip.Status.ToString(); trip.Status = (Status)statusNames.IndexOf(newStatus); string originTown = trip.OriginBusStation.Town.Name; string destinationTown = trip.DestinationBusStation.Town.Name; result.AppendLine($"Trip from {originTown} to {destinationTown} on {trip.DepartureTime}"); result.AppendLine($"Status changed from {oldStatus} to {newStatus}"); if (newStatus == "Arrived") { int passengersCount = trip.Tickets.Count; result.Append($"On {trip.ArrivalTime} - {passengersCount} passengers arrived at {destinationTown} from {originTown}"); var arrivedTrip = new ArrivedTrip() { ActualArrivedTime = trip.ArrivalTime, DestinationBusStation = destinationTown, OriginBusStation = originTown, PassengersCount = passengersCount }; db.ArrivedTrips.Add(arrivedTrip); } db.SaveChanges(); } return(result.ToString()); }