Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        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();
        }