public BuyTicketSummary BuyWithoutReservation(TicketBuyingModel ticketBuyingModel) { if (projectionRepository.Get(ticketBuyingModel.ProjectionId) == null) { return(new BuyTicketSummary(false, System.Net.HttpStatusCode.NotFound, "Projection not found!", null)); } else if (!this.ticketRepository.SeatExists(ticketBuyingModel.RowNumber, ticketBuyingModel.ColumnNumber, ticketBuyingModel.ProjectionId)) { return(new BuyTicketSummary(false, System.Net.HttpStatusCode.BadRequest, "Invalid seat!", null)); } else if (ticketRepository.SeatIsOccupied(ticketBuyingModel.RowNumber, ticketBuyingModel.ColumnNumber, ticketBuyingModel.ProjectionId)) { return(new BuyTicketSummary(false, System.Net.HttpStatusCode.BadRequest, "The seat you have chosen is occupied!", null)); } else if (projectionRepository.ProjectionHasStarted(ticketBuyingModel.ProjectionId)) { return(new BuyTicketSummary(false, System.Net.HttpStatusCode.BadRequest, "You cannot buy a ticket for a started or finished projection!", null)); } Ticket ticket = (Ticket)ticketRepository.BuyTicket(ticketBuyingModel); TicketReceiptModel ticketReceiptModel = new TicketReceiptModel() { TicketId = ticket.Id, CinemaName = ticket.Projection.Room.Cinema.Name, MovieName = ticket.Projection.Movie.Name, ColumnNumber = ticket.ColumnNumber, RowNumber = ticket.RowNumber, ProjectionStartDate = ticket.Projection.StartDate, RoomNumber = ticket.Projection.Room.Number }; return(new BuyTicketSummary(true, System.Net.HttpStatusCode.OK, "Ticket bought!", ticketReceiptModel)); }
public IHttpActionResult BuyTicket(TicketBuyingModel ticketBuyingModel) { if (!ModelState.IsValid) { return(BadRequest()); } var result = buyTicket.BuyWithoutReservation(ticketBuyingModel); if (result.BoughtSuccessfully) { return(Ok(result.TicketReceipt)); } return(ResponseMessage(Request.CreateResponse(result.StatusCode, result.Message))); }
public ITicket BuyTicket(TicketBuyingModel ticketBuyingModel) { var ticket = new Ticket(); ticket.ColumnNumber = ticketBuyingModel.ColumnNumber; ticket.RowNumber = ticketBuyingModel.RowNumber; ticket.ProjectionId = ticketBuyingModel.ProjectionId; this.dbContext.Tickets.Add(ticket); dbContext.SaveChanges(); dbContext.Entry(ticket).Reference(a => a.Projection).Load(); dbContext.Entry(ticket.Projection).Reference(a => a.Movie).Load(); dbContext.Entry(ticket.Projection).Reference(a => a.Room).Load(); dbContext.Entry(ticket.Projection.Room).Reference(a => a.Cinema).Load(); return(ticket); }