Exemple #1
0
        /// <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();
        }
Exemple #2
0
        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());
        }
Exemple #3
0
        /// <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();
        }
Exemple #4
0
        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."));
            }
        }