Пример #1
0
        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");
        }
Пример #2
0
        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());
        }
Пример #3
0
        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());
        }