public IHttpActionResult Post(ReservationRendition rendition)
        {
            DateTimeOffset requestedDate;
            if (!DateTimeOffset.TryParse(rendition.Date, out requestedDate))
                return this.BadRequest("Invalid date.");

            var min = requestedDate.Date;
            var max = requestedDate.Date.AddDays(1);

            using (var ctx = new ReservationsContext())
            {
                var reservedSeats = (from r in ctx.Reservations
                                     where min <= r.Date && r.Date < max
                                     select r.Quantity)
                                    .DefaultIfEmpty(0)
                                    .Sum();
                if (rendition.Quantity + reservedSeats > capacity)
                    return this.StatusCode(HttpStatusCode.Forbidden);

                ctx.Reservations.Add(new Reservation
                {
                    Date = requestedDate,
                    Name = rendition.Name,
                    Email = rendition.Email,
                    Quantity = rendition.Quantity
                });
                ctx.SaveChanges();
            }

            return this.Ok();
        }
示例#2
0
        public IHttpActionResult Post(ReservationRendition rendition)
        {
            if (!ReservationDate.IsValid(rendition.Date))
            {
                return(this.BadRequest("Invalid date."));
            }

            var requestedDate = new ReservationDate(rendition.Date);

            if (!reservationProcessor.IsFeasible(requestedDate, rendition.Quantity))
            {
                return(this.StatusCode(HttpStatusCode.Forbidden));
            }

            reservationsRepository.AddReservation(new Reservation
            {
                Date     = requestedDate.Value,
                Name     = rendition.Name,
                Email    = rendition.Email,
                Quantity = rendition.Quantity
            });

            return(this.Ok());
        }
        public IHttpActionResult Post(ReservationRendition rendition)
        {
            DateTimeOffset requestedDate;

            if (!DateTimeOffset.TryParse(rendition.Date, out requestedDate))
            {
                return(this.BadRequest("Invalid date."));
            }

            var min = requestedDate.Date;
            var max = requestedDate.Date.AddDays(1);

            using (var ctx = new ReservationsContext())
            {
                var reservedSeats = (from r in ctx.Reservations
                                     where min <= r.Date && r.Date < max
                                     select r.Quantity)
                                    .DefaultIfEmpty(0)
                                    .Sum();
                if (rendition.Quantity + reservedSeats > capacity)
                {
                    return(this.StatusCode(HttpStatusCode.Forbidden));
                }

                ctx.Reservations.Add(new Reservation
                {
                    Date     = requestedDate,
                    Name     = rendition.Name,
                    Email    = rendition.Email,
                    Quantity = rendition.Quantity
                });
                ctx.SaveChanges();
            }

            return(this.Ok());
        }