Exemplo n.º 1
0
        public async Task <ActionResult <Customer> > CreateCustomerAndBook(Customer customer, int flightId, int purchasePrice)
        {
            _context.CustomerSet.Add(customer);
            await _context.SaveChangesAsync();

            Booking booking = new Booking();

            booking.CustomerID    = customer.CustomerID;
            booking.FlightID      = flightId;
            booking.PurchasePrice = purchasePrice;
            _context.BookingSet.Add(booking);
            await _context.SaveChangesAsync();

            Flight flight = await _context.FlightSet.FindAsync(flightId);

            var count = flight.BookingSet.Count;

            if (count >= booking.Flight.Seats)
            {
                flight.Full = true;
                _context.Entry(flight).State = EntityState.Modified;
                await _context.SaveChangesAsync();
            }

            return(CreatedAtAction("GetCustomer", new { id = customer.CustomerID }, customer));
        }
Exemplo n.º 2
0
        public async Task <ActionResult <Models.BookingError> > PostBooking(Models.Booking bM)
        {
            Console.WriteLine(bM);

            Flight f = _context.FlightSet.Find(bM.FlightNo);

            if (f == null)
            {
                return(new Models.BookingError(404, "The flight was not find, please try again"));
            }
            Models.Flight fM = f.ConvertToFlightM();
            if (fM.AvailableSeats <= 0)
            {
                return(new Models.BookingError(99, "The selected flight is already full"));
            }
            if (fM.Date < DateTime.Now)
            {
                return(new Models.BookingError(36, "The selected flight is not available"));
            }
            var calculatedPrice = fM.GetPrice();

            Console.WriteLine(calculatedPrice);
            if (!fM.GetPrice().Equals(bM.Price))
            {
                return(new Models.BookingError(103, "The selected price does not match. Please retry the booking"));
            }

            Passenger p = new Passenger {
                Surname = bM.Surname, GivenName = bM.GivenName, Weight = bM.Weight
            };

            _context.PassengerSet.Add(p);
            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                throw;
            }

            Booking b = new Booking {
                FlightNo = bM.FlightNo, PassengerID = p.PersonID, PricePaid = bM.Price
            };

            _context.BookingSet.Add(b);
            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                throw;
            }

            return(new Models.BookingError(500, "The booking was successfully registered"));
        }
Exemplo n.º 3
0
        public async Task <ActionResult <Flight> > PostFlight(Flight flight)
        {
            _context.FlightSet.Add(flight);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetFlight", new { id = flight.FlightID }, flight));
        }
Exemplo n.º 4
0
        public static async void ChangeDataAsync()
        {
            CUI.MainHeadline("Start " + nameof(ChangeDataAsync));
            using (var ctx = new WWWingsContext())
            {
                // Define query
                var query = (from f in ctx.FlightSet.Include(p => p.BookingSet).ThenInclude(b => b.Passenger) where f.Departure == "Rome" && f.FreeSeats > 0 select f).Take(1);
                // Abfrage aynchron ausführen
                CUI.PrintWithThreadID("Start database query");
                var flightSet = await query.ToListAsync();

                CUI.PrintWithThreadID("End database query");
                // Print results
                foreach (Flight flight in flightSet)
                {
                    CUI.PrintWithThreadID("Flight: " + flight.FlightNo + " from " + flight.Departure + " to " +
                                          flight.Destination + " has " + flight.FreeSeats + " free seats");

                    foreach (var b in flight.BookingSet.Take(5))
                    {
                        CUI.PrintWithThreadID(" Passenger:  " + b.Passenger.GivenName + " " + b.Passenger.Surname);
                        CUI.PrintWithThreadID("   Start saving");
                        b.Passenger.Status = 'A';
                        var count = await ctx.SaveChangesAsync();

                        CUI.PrintWithThreadID($"   {count} Changes saved!");
                    }
                }
                CUI.Headline("End " + nameof(ChangeDataAsync));
            }
        }
        public async Task <ActionResult <PassengerM> > PostPassengerM(PassengerM passengerM)
        {
            var passenger = new Passenger();

            if (passengerM == null)
            {
                return(NotFound());
            }
            else
            {
                passenger.GivenName = passengerM.GivenName;
                passenger.Surname   = passengerM.Surname;
            }

            _context.PassengerSet.Add(passenger);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (BookingExists(passenger.PersonID))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            return(CreatedAtAction("GetPassenger", new { id = passenger.PersonID }, passenger));
        }
Exemplo n.º 6
0
        public static async void AsyncForeach()
        {
            CUI.MainHeadline("Start " + nameof(AsyncForeach));
            WWWingsContext ctx = new WWWingsContext();
            // Define query
            var query = (from f in ctx.FlightSet.Include(p => p.BookingSet).ThenInclude(b => b.Passenger) where f.Departure == "Rome" && f.FreeSeats > 0 select f).Take(1);

            // Executing und iterate query with ForEachAsync
            CUI.PrintWithThreadID("Print objects");
            await query.ForEachAsync(async flight =>
            {
                // Print results
                CUI.PrintWithThreadID("Flight: " + flight.FlightNo + " from " + flight.Departure + " to " + flight.Destination + " has " + flight.FreeSeats + " free Seats");

                foreach (var p in flight.BookingSet)
                {
                    CUI.PrintWithThreadID(" Passenger: " + p.Passenger.GivenName + " " + p.Passenger.Surname);
                }

                // Save changes to each flight object within the loop
                CUI.PrintWithThreadID("  Start saving");
                flight.FreeSeats--;
                await ctx.SaveChangesAsync();

                //not possible: var count  = await ctx.SaveChangesAsync(); --> "New transaction is not allowed because there are other threads running in the session."

                CUI.PrintWithThreadID("   Changes saved!");
            });

            CUI.Headline("End " + nameof(AsyncForeach));
        }
        public static void Demo_ForeachProblem()
        {
            CUI.Headline(nameof(Demo_ForeachProblem));
            WWWingsContext ctx = new WWWingsContext();
            // Define query
            var query = (from f in ctx.FlightSet.Include(p => p.BookingSet).ThenInclude(b => b.Passenger) where f.Departure == "Rome" && f.FreeSeats > 0 select f).Take(1);

            // Query is performed implicitly by foreach
            foreach (var flight in query)
            {
                // Print results
                CUI.Print("Flight: " + flight.FlightNo + " from " + flight.Departure + " to " + flight.Destination + " has " + flight.FreeSeats + " free seats");

                foreach (var p in flight.BookingSet)
                {
                    CUI.Print(" Passenger  " + p.Passenger.GivenName + " " + p.Passenger.Surname);
                }

                // Save change to every flight object within the loop
                CUI.Print("  Start saving");
                flight.FreeSeats--;
                ctx.SaveChangesAsync(); // SaveChanges() will produce ERROR!!!
                CUI.Print("  End saving");
            }
        }
Exemplo n.º 8
0
        public async Task <ActionResult <Booking> > PostBooking(Booking booking)
        {
            _context.BookingSet.Add(booking);
            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (BookingExists(booking.FlightNo))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            return(CreatedAtAction("GetBooking", new { id = booking.FlightNo }, booking));
        }
Exemplo n.º 9
0
        public async Task <ActionResult <Flight> > PostFlight(Models.FlightM flight)
        {
            Flight f = new Flight();

            f.Pilot       = _context.PilotSet.Find(1);
            f.Seats       = flight.Seats;
            f.BasePrice   = flight.BasePrice;
            f.Date        = flight.Date;
            f.Departure   = flight.Departure;
            f.Destination = flight.Destination;
            _context.FlightSet.Add(f);
            try
            {
                await _context.SaveChangesAsync();
            }
            catch (Exception e)
            {
                string t = e.Message;
            }

            return(CreatedAtAction("GetFlight", new { id = flight.FlightNo }, flight));
        }
Exemplo n.º 10
0
        public async static void LINQ_MiscAsync()
        {
            CUI.MainHeadline("Start " + nameof(LINQ_MiscAsync));
            var ort = "Berlin";

            // Create context instance
            using (var ctx = new WWWingsContext())
            {
                // Abfragen definieren, aber noch nicht ausführen
                IQueryable <Flight> query = (from x in ctx.FlightSet
                                             where x.Departure == ort &&
                                             x.FreeSeats > 0
                                             orderby x.Date, x.Departure
                                             select x);

                // Alternative:
                var query2 = ctx.FlightSet.Where(x => x.Departure == ort && x.FreeSeats > 0)
                             .OrderBy(x => x.Date).ThenBy(x => x.Departure);

                // Count
                var count1 = await query.CountAsync();

                CUI.Print(System.Threading.Thread.CurrentThread.ManagedThreadId + ": " + count1);
                // Execute query now
                List <Flight> flightSet = await query.ToListAsync();

                CUI.Print(System.Threading.Thread.CurrentThread.ManagedThreadId + ": " + flightSet.Count);

                var flight = flightSet.Take(1).SingleOrDefault();

                flight.FreeSeats--;

                var count2 = await ctx.SaveChangesAsync();

                CUI.Print(System.Threading.Thread.CurrentThread.ManagedThreadId + ": " + count2);
            }
        }