コード例 #1
0
        public ActionResult UpdateTastingNote(int brewId,
                                              int id,
                                              [FromBody] TastingNoteForUpdateDto tastingNote,
                                              [FromHeader(Name = ExtendedControllerBase.ACCEPT)] string mediaTypes)
        {
            var splitMediaTypes = mediaTypes.Split(',');

            if (!MediaTypeHeaderValue.TryParseList(splitMediaTypes,
                                                   out IList <MediaTypeHeaderValue> parsedMediaTypes))
            {
                return(BadRequest());
            }

            if (!_homebrewRepository.BrewExists(brewId))
            {
                return(NotFound());
            }

            var tastingNoteEntity = _homebrewRepository.GetTastingNote(brewId, id);

            if (tastingNoteEntity == null)
            {
                return(NotFound());
            }

            // TODO: Check BrewId/Brew isn't skipped
            _mapper.Map(tastingNote, tastingNoteEntity);
            _homebrewRepository.UpdateTastingNote(tastingNoteEntity);
            _homebrewRepository.Save();

            if (parsedMediaTypes.Any(pmt => pmt.SubTypeWithoutSuffix.EndsWith(this.HATEOAS, StringComparison.InvariantCultureIgnoreCase)))
            {
                var links = CreateLinksForTastingNote(brewId, id);

                var linkedResourcesToReturn = _mapper.Map <TastingNoteDto>(tastingNote)
                                              .ShapeData(null) as IDictionary <string, object>;

                linkedResourcesToReturn.Add(this.LINKS, links);

                return(Ok(linkedResourcesToReturn));
            }

            return(NoContent());
        }