public ActionResult <RecipeDto> CreateRecipe([FromBody] RecipeForCreationDto recipe, [FromHeader(Name = ExtendedControllerBase.ACCEPT)] string mediaTypes) { var splitMediaTypes = mediaTypes.Split(','); if (!MediaTypeHeaderValue.TryParseList(splitMediaTypes, out IList <MediaTypeHeaderValue> parsedMediaTypes)) { return(BadRequest()); } if (!_homeBrewRepository.WaterProfileExists(recipe.WaterProfileId)) { ModelState.AddModelError( "Description", "The water profile ID for the recipe must exist."); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var includeSteps = true; var finalRecipe = _mapper.Map <Entities.Recipe>(recipe); _homeBrewRepository.AddRecipe(finalRecipe); finalRecipe.WaterProfile = _homeBrewRepository.GetWaterProfile(recipe.WaterProfileId, true); _homeBrewRepository.Save(); var recipeToReturn = _mapper.Map <Models.RecipeDto>(finalRecipe); if (parsedMediaTypes.Any(pmt => pmt.SubTypeWithoutSuffix.EndsWith(this.HATEOAS, StringComparison.InvariantCultureIgnoreCase))) { var links = CreateLinksForRecipe(recipeToReturn.Id, includeSteps); var linkedResourceToReturn = recipeToReturn.ShapeData(null) as IDictionary <string, object>; linkedResourceToReturn.Add(this.LINKS, links); return(CreatedAtRoute( "GetRecipe", new { id = linkedResourceToReturn["Id"], includeSteps }, linkedResourceToReturn)); } return(CreatedAtRoute( "GetRecipe", new { id = recipeToReturn.Id, includeSteps }, recipeToReturn)); }
public IActionResult GetWaterProfile(int id, [FromHeader(Name = ExtendedControllerBase.ACCEPT)] string mediaTypes, bool includeAdditions = false) { var splitMediaTypes = mediaTypes.Split(','); if (!MediaTypeHeaderValue.TryParseList(splitMediaTypes, out IList <MediaTypeHeaderValue> parsedMediaTypes)) { return(BadRequest()); } var waterProfile = _homeBrewRepository.GetWaterProfile(id, includeAdditions); if (waterProfile == null) { return(NotFound()); } if (parsedMediaTypes.Any(pmt => pmt.SubTypeWithoutSuffix.EndsWith(this.HATEOAS, StringComparison.InvariantCultureIgnoreCase))) { var links = CreateLinksForWaterProfile(id, includeAdditions); // We aren't supporting shaping of data currently so pass in an empty string var linkedResourceToReturn = includeAdditions ? _mapper.Map <WaterProfileDto>(waterProfile).ShapeData(null) as IDictionary <string, object> : _mapper.Map <WaterProfileWithoutAdditionsDto>(waterProfile).ShapeData(null) as IDictionary <string, object>; linkedResourceToReturn.Add(this.LINKS, links); return(Ok(linkedResourceToReturn)); } return(includeAdditions ? Ok(_mapper.Map <WaterProfileDto>(waterProfile).ShapeData(null)) : Ok(_mapper.Map <WaterProfileWithoutAdditionsDto>(waterProfile).ShapeData(null))); }