public void DeleteResrvation(Guid reservationID) { ReservationDal reservationDal = new ReservationDal(); var entity = reservationDal.GetEntity(reservationID); if (entity != null) { rwl.AcquireWriterLock(new TimeSpan(1,0,0)); var reservationsInCache = (HallCache[entity.EventID.ToString()] as List<Contracts.Reservation>); if (reservationsInCache != null) reservationsInCache.RemoveAll(rv => (SeatIndex.CreateSeatsString(rv.Seats) == SeatIndex.CreateSeatsString(entity.Seats)) || ((rv.ID == entity.ID))); reservationDal.DeleteEntity(reservationID); rwl.ReleaseWriterLock(); } }
public void UpdateResrvation(Contracts.Reservation newReservation) { ReservationDal reservationDal = new ReservationDal(); // validate Contracts.Reservation OldRersevation = reservationDal.GetEntity(newReservation.ID); if (OldRersevation == null) throw new HallStateException(string.Format(StringsResource.ReservationNotFound, newReservation.ID)); var oldseats = OldRersevation.Seats; foreach (var si in newReservation.Seats) { if ((si.Row < 0) || (si.Seat < 0)) throw new ArgumentException(StringsResource.InvalidSeatOrRow); //Check that there is no other reservation for the same seats var takenSeats = GetHallState(newReservation.EventID); foreach (var item in newReservation.Seats) { if (takenSeats.Contains(item) && (!oldseats.Contains(item))) throw new ReservationException(StringsResource.SeatAlreadyTaken); } } rwl.AcquireWriterLock(new TimeSpan(1, 0, 0)); //Update the database reservationDal.UpdateEntity(newReservation); //2. Upfdate the cache var cache = HallCache[newReservation.EventID.ToString()] as List<Contracts.Reservation>; var reservationToUpdate = cache.Where(res => res.ID == newReservation.ID).FirstOrDefault(); reservationToUpdate = newReservation; rwl.ReleaseWriterLock(); }