/// <summary> /// Adds the breed to the context, without sub breeds. /// </summary> /// <param name="breedName">Name of breed we are adding.</param> /// <param name="dataContext">Data context we are adding the breed to</param> public static void PopulateDbContextWithNewDogBreed(string breedName, DogBreedContext dataContext) { DogBreedItem dogBreed = new DogBreedItem { BreedName = breedName }; dataContext.DogBreedItemList.Add(dogBreed); dataContext.SaveChanges(); }
public async Task <ActionResult <DogBreedItem> > PutBreed(long id, DogBreedItem dogBreedItem) { if (id != dogBreedItem.DogBreedItemId) { return(BadRequest()); } dataContext.Entry(dogBreedItem).State = EntityState.Modified; await dataContext.SaveChangesAsync(); return(Ok()); }
/// <summary> /// Creates all sub-breeds and saves them in the context handed to it. /// </summary> /// <param name="dogSubbreedArray"></param> /// <param name="parentBreedId">Id of the breed this sub breed belongs to</param> /// <param name="dataContext">Data context we are adding the dog to</param> public static void PopulateDbContextWithNewDogBreedSubbreeds(string[] dogSubbreedArray, long parentBreedId, DogBreedContext dataContext) { DogBreedItem parentBreed = dataContext.DogBreedItemList.Find(parentBreedId); foreach (string subBreedName in dogSubbreedArray) { DogSubBreed subBreed = new DogSubBreed() { ParentBreedId = parentBreedId, SubBreedName = subBreedName }; dataContext.DogSubBreedItemList.Add(subBreed); } //Now save DB context so that we can retreive them with a generated ID. dataContext.SaveChanges(); //Build a list of all sub breeds where the sub-subbreed's parent ID is the parent Id we're looking for. List <DogSubBreed> subBreeds = dataContext.DogSubBreedItemList.Where(x => x.ParentBreedId == parentBreedId).ToList(); //set it in the context using our reference dataContext.DogBreedItemList.Find(parentBreedId).SubBreeds = subBreeds; dataContext.SaveChanges(); }
public async Task <ActionResult <DogBreedItem> > PostBreed(DogBreedItem dogBreed) { try { //Validate breed details if (dataContext.DogBreedItemList.Any(x => x.BreedName == dogBreed.BreedName)) { return(UnprocessableEntity($"\"Error\" : \"Breed Name {dogBreed.BreedName} already exists.\"")); } if (dogBreed.BreedName == "" || dogBreed.BreedName == null) { return(UnprocessableEntity("\"Error\" : \"Please provide a 'breedName' property, and non-empty string value.\"")); } bool emptySubBreedList = false; //Validate subbreed details ///If we have nothing in the payload for subbreeds, create an empty list for it. if (dogBreed.SubBreeds == null) { dogBreed.SubBreeds = new List <DogSubBreed>(); emptySubBreedList = true; } if (!emptySubBreedList) { if (dogBreed.SubBreeds.Count != 0) { foreach (var x in dogBreed.SubBreeds) { if (x.SubBreedName == "" || x.SubBreedName == null) { return(UnprocessableEntity("\"Error\" : \"Please provide a 'subBreedName' property on each sub-breed, and non-empty string value.\"")); } } } } var hashSet1 = new HashSet <string>(); if (!dogBreed.SubBreeds.All(subBreed => hashSet1.Add(subBreed.SubBreedName))) { return(UnprocessableEntity($"\"Error\" : \"Sub-breed name {hashSet1.Last()} is duplicated within the same breed. Please ensure sub-breed values are unique within the breed.\"")); } //Save dog breed to context when we've verified it has a unique name dataContext.DogBreedItemList.Add(dogBreed); await dataContext.SaveChangesAsync(); //If we've got sub-breeds if (dogBreed.SubBreeds.Count != 0) { //Set subbreed parentId to the Id that got generated when the parent was saved to the database. dogBreed = dataContext.DogBreedItemList.First(x => x.BreedName == dogBreed.BreedName); dogBreed.SubBreeds.ForEach(x => x.ParentBreedId = dogBreed.DogBreedItemId); await dataContext.SaveChangesAsync(); } //Return object we successfully built return(Created($"api/dogbreed/{dogBreed.DogBreedItemId}", dataContext.DogBreedItemList.Find(dogBreed.DogBreedItemId))); } catch { dataContext.DogBreedItemList.Remove(dogBreed); await dataContext.SaveChangesAsync(); return(UnprocessableEntity("Could not process. Check your formatting for missing parenthesis and list seperators.")); } }