Пример #1
0
 public bool TripExists(int tripId)
 {
     using (var context = new BusTicketSystemContext())
     {
         return(context.Trips.Any(t => t.Id == tripId));
     }
 }
Пример #2
0
 public bool BusCompanyExists(string busCompanyName)
 {
     using (var context = new BusTicketSystemContext())
     {
         return(context.BusCompanies.Any(b => b.Name == busCompanyName));
     }
 }
Пример #3
0
 public bool BusStationExsits(int stationId)
 {
     using (var context = new BusTicketSystemContext())
     {
         return(context.BusStations.Any(s => s.Id == stationId));
     }
 }
Пример #4
0
 public bool BusCompanyExists(int busCompanyId)
 {
     using (var context = new BusTicketSystemContext())
     {
         return(context.BusCompanies.Any(b => b.Id == busCompanyId));
     }
 }
Пример #5
0
        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}");
            }
        }
Пример #6
0
        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}");
            }
        }
Пример #7
0
 public bool CustomerExists(int customerId)
 {
     using (var context = new BusTicketSystemContext())
     {
         return(context.Customers.Any(c => c.Id == customerId));
     }
 }
Пример #8
0
 public static void ResetDatabase()
 {
     using (var db = new BusTicketSystemContext())
     {
         db.Database.EnsureDeleted();
         db.Database.EnsureCreated();
     }
 }
Пример #9
0
        public static void ResetDatabase(BusTicketSystemContext context)
        {
            context.Database.EnsureDeleted();

            context.Database.Migrate();

            Seed(context);
        }
Пример #10
0
        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);
        }
Пример #11
0
        private static void ResetDatabase()
        {
            using (var context = new BusTicketSystemContext())
            {
                context.Database.EnsureDeleted();
                context.Database.Migrate();

                Seed(context);
            }
        }
Пример #12
0
        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();
        }
Пример #14
0
 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!");
 }
Пример #15
0
        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();
        }
Пример #16
0
        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);
                }
            }
        }
Пример #17
0
        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);
        }
Пример #19
0
        // <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());
            }
        }
Пример #20
0
        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));
        }
Пример #22
0
        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}");
            }
        }
Пример #23
0
        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;
 }
Пример #26
0
 public ReviewService(BusTicketSystemContext db)
 {
     this.db = db;
 }
Пример #27
0
 public DatabaseInitializeService(BusTicketSystemContext db)
 {
     this.db = db;
 }
 public ChangeTripStatusCommand(BusTicketSystemContext context)
 {
     this.context = context;
 }
Пример #29
0
 public CustomerService(BusTicketSystemContext context)
 {
     this.context = context;
 }
Пример #30
0
        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());
        }