Ejemplo n.º 1
0
        public async Task Handle(CancelLinkedCarFailed message, IMessageHandlerContext context)
        {
            log.Info($"Received CancelLinkedCarFailed, CombinedReservationId = ");

            List <Airline> companies = _context.AirlineCompanies
                                       .Include(comp => comp.FastTickets)
                                       .Include(comp => comp.Destinations)
                                       .Include(comp => comp.PopDestinaations)
                                       .Include(comp => comp.Raters)
                                       .Include(comp => comp.Flights).ThenInclude(f => f.Luggage)
                                       .Include(fs => fs.Flights).ThenInclude(d => d.From)
                                       .Include(fs => fs.Flights).ThenInclude(d => d.To)
                                       .Include(fs => fs.Flights).ThenInclude(d => d.Stops)
                                       .Include(fs => fs.Flights).ThenInclude(d => d.Raters)
                                       .Include(fs => fs.Flights).ThenInclude(d => d.SoldTickets)
                                       .Include(fs => fs.Flights).ThenInclude(d => d.AllTickets)
                                       .Include(fs => fs.Flights).ThenInclude(d => d.Seats).ThenInclude(d => d.Traveller)
                                       .Include(fs => fs.Flights).ThenInclude(d => d.SoldTickets)
                                       .Include(fs => fs.Flights).ThenInclude(d => d.Raters)
                                       .ToList();


            foreach (var c in companies)
            {
                foreach (var f in c.Flights)
                {
                    foreach (var rez in f.AllTickets)
                    {
                        if (rez.Id == message.idRez)
                        {
                            rez.userId  = message.userId;
                            rez.reqTick = message.ticket.ToString();
                            await _context.SaveChangesAsync();
                        }
                    }
                }
            }

            foreach (var u in companies)
            {
                foreach (var u2 in u.Flights)
                {
                    foreach (var u3 in u2.Seats)
                    {
                        if (message.seatId == u3.Id)
                        {
                            u3.Taken = true;
                            await _context.SaveChangesAsync();
                        }
                    }
                }
            }
        }
        public async Task Handle(FlightCancelled message, IMessageHandlerContext context)
        {
            log.Info($"Received FlightCancelled");

            // doda poene korisniku i ako uspije to je kraj, postavi onu rezervaciju na successfull

            var companies = _context.RentACarCompanies
                            .Include(comp => comp.Cars).ThenInclude(car => car.RentedDates)
                            .Include(comp => comp.Reservations).ThenInclude(res => res.Car)
                            .Include(comp => comp.Reservations).ThenInclude(res => res.Dates)
                            .ToList();

            foreach (var company in companies)
            {
                foreach (var res in company.Reservations)
                {
                    if (res.SeatReservationId == message.ticket)
                    {
                        foreach (var car in company.Cars)
                        {
                            if (car.ID == res.Car.ID)
                            {
                                foreach (var date in res.Dates)
                                {
                                    if (car.RentedDates.Contains(date))
                                    {
                                        car.RentedDates.Remove(date);
                                    }
                                }
                            }
                        }

                        using (var dbContextTransaction = _context.Database.BeginTransaction())
                        {
                            company.Reservations.Remove(res);
                            _context.Update(company);
                            try
                            {
                                _context.SaveChanges();
                            }
                            catch (Exception e)
                            {
                                dbContextTransaction.Rollback();
                                CancelLinkedCarFailed failedEvent = new CancelLinkedCarFailed();
                                failedEvent.userId = message.userId;
                                failedEvent.ticket = message.ticket;
                                failedEvent.idRez  = message.idRez;
                                await context.Publish(failedEvent);

                                return;
                            }

                            _context.Remove(res);
                            try
                            {
                                _context.SaveChanges();
                            }
                            catch (Exception e)
                            {
                                dbContextTransaction.Rollback();
                                CancelLinkedCarFailed failedEvent = new CancelLinkedCarFailed();
                                failedEvent.userId = message.userId;
                                failedEvent.ticket = message.ticket;
                                failedEvent.idRez  = message.idRez;
                                await context.Publish(failedEvent);

                                return;
                            }
                        }

                        CarReservationCancelled cancelled = new CarReservationCancelled();
                        cancelled.userId = message.userId;
                        await context.Publish(cancelled);

                        return;
                    }
                }
            }
        }