/// <summary>
        /// Adding a new TricksProgress
        /// to the DB
        /// </summary>
        /// <param name="tricksProgress"></param>
        /// <returns>The added TricksProgress</returns>
        public async Task <Core.Model.TricksProgress> PostTricksProgressAsync(Core.Model.TricksProgress tricksProgress)
        {
            var exists = await _dbContext.TricksProgress
                         .FirstOrDefaultAsync(t => t.PetId == tricksProgress.PetId && t.TrickId == tricksProgress.TrickId);

            if (exists is null)
            {
                var newTricks = new TricksProgress
                {
                    PetId   = tricksProgress.PetId,
                    TrickId = tricksProgress.TrickId,
                };

                _logger.LogInformation("Adding a new TricksProgress.");

                _dbContext.Add(newTricks);
                await _dbContext.SaveChangesAsync();

                // After the Entity is added, return
                // the Entity by getting the max id (Newest Entity)
                int id = await _dbContext.TricksProgress.MaxAsync(i => i.Id);

                var nt = await _dbContext.TricksProgress
                         .Include(t => t.Trick)
                         .FirstOrDefaultAsync(t => t.Id == id);

                return(Mapper.MapTricksProgress(nt));
            }
            else
            {
                _logger.LogInformation("Dog with this ID {tricksProgressId} already knows this Trick.", tricksProgress.PetId);
                return(null);
            }
        }
 public static Model.TricksProgress MapTricksProgress(Core.Model.TricksProgress tricksProgress)
 {
     return(new Model.TricksProgress
     {
         Id = tricksProgress.Id,
         PetId = tricksProgress.PetId,
         TrickId = tricksProgress.TrickId,
         Progress = tricksProgress.Progress,
         Trick = MapTricks(tricksProgress.Trick)
     });
 }
        /// <summary>
        /// Updates a dogs Trick Progress based
        /// on Dogs ID
        /// </summary>
        /// <param name="id"></param>
        /// <param name="tricksProgress"></param>
        /// <returns>The updated TricksProgress</returns>
        public async Task <Core.Model.TricksProgress> PutTricksProgressAsync(int id, Core.Model.TricksProgress tricksProgress)
        {
            var oldTricks = await _dbContext.TricksProgress
                            .FirstOrDefaultAsync(t => t.Id == tricksProgress.Id);

            if (oldTricks is null)
            {
                _logger.LogError("The TricksProgress with ID {tricksProgressId} does not exist.", tricksProgress.Id);
                return(null);
            }
            else
            {
                _logger.LogInformation("Updating a TricksProgress with ID {tricksProgressId}", tricksProgress.Id);

                // This method only marks the properties changed
                // as modified
                var newTricks = Mapper.MapTricksProgress(tricksProgress);

                _dbContext.Entry(oldTricks).CurrentValues.SetValues(newTricks);
                await _dbContext.SaveChangesAsync();

                return(Mapper.MapTricksProgress(newTricks));
            }
        }