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