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; } } } }