public async Task <IActionResult> UpdateTicket(int ticketId, TicketToUpdateDto ticketToUpdate) { var ticketFromRepo = await _repo.GetTicket(ticketId); if (ticketFromRepo.isArchived) { BadRequest("Ticket is Archived"); } if (ticketToUpdate.UserId == null) { ticketFromRepo.User = null; } else if (ticketToUpdate.UserId != null) { ticketFromRepo.User = await _repo.GetUser(ticketToUpdate.UserId, false); } ticketFromRepo.Status = await _repo.GetStatus(ticketToUpdate.StatusId); ticketFromRepo.Category = await _repo.GetCategory(ticketToUpdate.CategoryId); ticketFromRepo.Priority = await _repo.GetPriority(ticketToUpdate.PriorityId); _mapper.Map(ticketToUpdate, ticketFromRepo); if (await _repo.SaveAll()) { return(NoContent()); } throw new Exception("Cant be updated the ticket"); }
public async Task <IActionResult> PartiallyUpdateTicket([FromRoute, SwaggerParameter(Description = "Id of ticket to update", Required = true)] Guid ticketId, [FromBody, SwaggerParameter(Description = "Jsonpatch operation document to update", Required = true)] JsonPatchDocument <TicketToUpdateDto> patchDoc, [FromRoute, SwaggerParameter(Description = "Id of the related movie", Required = true)] Guid movieId, [FromRoute, SwaggerParameter(Description = "Id of the related showtime", Required = true)] Guid showtimeId, [FromHeader(Name = "Accept"), SwaggerParameter(Description = "media type to request betwen json or json+hateoas")] string mediaType) { if (!await _ticketRepository.MovieExists(movieId)) { return(NotFound()); } if (!await _ticketRepository.ShowtimeExists(showtimeId)) { return(NotFound()); } if (patchDoc == null) { return(BadRequest()); } var ticketFromDb = await _ticketRepository.GetTicketAsync(ticketId); if (ticketFromDb == null) { var ticketToCreate = new TicketToUpdateDto(); patchDoc.ApplyTo(ticketToCreate, ModelState); if (!ModelState.IsValid) { new ProccessingEntityObjectResultErrors(ModelState); } var ticketToAddToDb = Mapper.Map <Ticket>(ticketToCreate); ticketToAddToDb.Id = ticketId; _ticketRepository.AddTicket(ticketToAddToDb); if (!await _ticketRepository.SaveChangesAsync()) { _logger.LogError("Upserting ticket failed"); } var ticketToReturn = Mapper.Map <TicketDto>(ticketToAddToDb); if (mediaType == "application/vnd.biob.json+hateoas") { var links = CreateLinksForTickets(ticketToReturn.Id, null); var linkedTicket = ticketToReturn.ShapeData(null) as IDictionary <string, object>; linkedTicket.Add("links", links); return(CreatedAtRoute("GetTicket", new { ticketId = ticketToReturn.Id }, linkedTicket)); } else { return(CreatedAtRoute("GetTicket", new { ticketId = ticketToReturn.Id }, ticketToReturn)); } } var ticketToPatch = Mapper.Map <TicketToUpdateDto>(ticketFromDb); patchDoc.ApplyTo(ticketToPatch, ModelState); if (!ModelState.IsValid) { new ProccessingEntityObjectResultErrors(ModelState); } Mapper.Map(ticketToPatch, ticketFromDb); _ticketRepository.UpdateTicket(ticketFromDb); if (!await _ticketRepository.SaveChangesAsync()) { _logger.LogError("partially updating ticket failed"); } return(NoContent()); }
public async Task <IActionResult> UpdateTicket([FromRoute, SwaggerParameter(Description = "Id of ticket to update", Required = true)] Guid ticketId, [FromRoute, SwaggerParameter(Description = "Id of related movie", Required = true)] Guid movieId, [FromRoute, SwaggerParameter(Description = "Id of related showtime", Required = true)] Guid showtimeId, [FromBody, SwaggerParameter(Description = "Fields to update and their new value", Required = true)] TicketToUpdateDto ticketToUpdate, [FromHeader(Name = "Accept"), SwaggerParameter(Description = "Media type to return eg. json or json+hateoas")] string mediaType) { if (!await _showtimeRepository.MovieExists(movieId)) { return(NotFound()); } if (!await _ticketRepository.ShowtimeExists(showtimeId)) { return(NotFound()); } var ticketFromDb = await _ticketRepository.GetTicketAsync(ticketId); // upserting if ticket does not already exist if (ticketFromDb == null) { var ticketEntity = Mapper.Map <Ticket>(ticketToUpdate); ticketEntity.Id = ticketId; ticketEntity.ShowtimeId = showtimeId; var availableSeat = await _seatRepository.GetFirstAvailableSeatByShowtimeIdAsync(showtimeId); ticketEntity.SeatId = availableSeat.Id; _ticketRepository.AddTicket(ticketEntity); if (!await _ticketRepository.SaveChangesAsync()) { _logger.LogError("Failed to upsert a new ticket"); } var ticketToReturn = Mapper.Map <TicketDto>(ticketEntity); if (mediaType == "application/vnd.biob.json+hateoas") { var links = CreateLinksForTickets(ticketToReturn.Id, null); var linkedTicket = ticketToReturn.ShapeData(null) as IDictionary <string, object>; linkedTicket.Add("links", links); return(CreatedAtRoute("GetTicket", new { ticketId = ticketToReturn.Id }, linkedTicket)); } else { return(CreatedAtRoute("GetTicket", new { ticketId = ticketToReturn.Id }, ticketToReturn)); } } Mapper.Map(ticketToUpdate, ticketFromDb); _ticketRepository.UpdateTicket(ticketFromDb); if (!await _ticketRepository.SaveChangesAsync()) { _logger.LogError("Failed to update a ticket"); } return(NoContent()); }