private void CalculateAverageRatings(ICollection <RatingModel> ratingModels, PetPhotoModel petPhotoModel)
        {
            var ratingsTable = new List <List <int?> >
            {
                ratingModels.Select(r => r.AwsomenessRating)
                .Where(d => d != null).ToList(),

                ratingModels.Select(r => r.CutenessRating)
                .Where(d => d != null).ToList(),

                ratingModels.Select(r => r.FunynessRating)
                .Where(d => d != null).ToList(),
            };

            if (ratingsTable[0].Any())
            {
                petPhotoModel.AverageAwsomnessRating = Math.Round((double)ratingsTable[0].Average(), 1);
            }
            if (ratingsTable[1].Any())
            {
                petPhotoModel.AverageCutenessRating = Math.Round((double)ratingsTable[1].Average(), 1);
            }
            if (ratingsTable[2].Any())
            {
                petPhotoModel.AverageFunnynessRating = Math.Round((double)ratingsTable[2].Average(), 1);
            }
        }
        public async Task <IActionResult> Edit(int id, PetPhotoModel petPhotoModel)
        {
            var dbPetPhotoModel = await _context.PetPhotos.FirstOrDefaultAsync(m => m.Id == id);

            if (id != dbPetPhotoModel.Id)
            {
                return(NotFound());
            }
            dbPetPhotoModel.PetName     = petPhotoModel.PetName;
            dbPetPhotoModel.Title       = petPhotoModel.Title;
            dbPetPhotoModel.Description = petPhotoModel.Description;

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(dbPetPhotoModel);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PetPhotoModelExists(dbPetPhotoModel.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
            }
            return(RedirectToAction("ViewDetails", "Details", new { id = id }));
        }
        public async Task <IActionResult> Edit(int id, [Bind("Id,PetName,Title,Description,ImageName,DateUploaded,AverageCutenessRating,AverageFunnynessRating,AverageAwsomnessRating")] PetPhotoModel petPhotoModel)
        {
            if (id != petPhotoModel.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(petPhotoModel);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PetPhotoModelExists(petPhotoModel.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(petPhotoModel));
        }
        public async Task <IActionResult> UploadPhoto([Bind("Id,PetName,Title,Description,ImageFile")] PetPhotoModel petPhotoModel)
        {
            if (ModelState.IsValid)
            {
                //Save image to wwwroot/image
                string wwwRootPath = _hostEnvironment.WebRootPath;
                string fileName    = Path.GetFileNameWithoutExtension(petPhotoModel.ImageFile.FileName);
                string extension   = Path.GetExtension(petPhotoModel.ImageFile.FileName);
                petPhotoModel.ImageName    = fileName = fileName + DateTime.Now.ToString("yymmssfff") + extension;
                petPhotoModel.DateUploaded = DateTime.Now;

                var folderPath = wwwRootPath + "\\UploadedPhotos\\";
                CreateFolderIfNotExist(folderPath);
                string path = Path.Combine(folderPath, fileName);

                using (var fileStream = new FileStream(path, FileMode.Create))
                {
                    await petPhotoModel.ImageFile.CopyToAsync(fileStream);
                }

                //GetLoggedInUser() gets the current user by id from the db context
                var user = GetLoggedInUser();
                petPhotoModel.UploadedBy = user.DisplayName;
                SetDefaultsAndAdd(user.Uploads, petPhotoModel);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(petPhotoModel));
        }
        public async Task <IActionResult> Create([Bind("Id,PetName,Title,Description,ImageName,DateUploaded,AverageCutenessRating,AverageFunnynessRating,AverageAwsomnessRating")] PetPhotoModel petPhotoModel)
        {
            if (ModelState.IsValid)
            {
                _context.Add(petPhotoModel);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(petPhotoModel));
        }