public void DeleteCreatureTag(CreatureTag creatureTag)
 {
     _baseRepository.Context.CreatureTags.Remove(creatureTag);
 }
 public void SaveCreatureTag(CreatureTag creatureTag)
 {
     _baseRepository.Context.CreatureTags.Add(creatureTag);
 }
 public void SaveCreatureTagAsync(CreatureTag creatureTag)
 {
     throw new NotImplementedException();
 }
        private void SaveCreatureData(Creature creature, CreatureDetailsModel model, IFormFile upload)
        {
            creature.CommonName            = model.CommonName;
            creature.Description           = model.Description;
            creature.Diet                  = model.Diet;
            creature.DifficultyDescription = model.DifficultyDescription;
            creature.Difficulty            = model.Difficulty;
            creature.Genus                 = model.Genus;
            creature.Species               = model.Species;
            creature.Length                = model.Length;
            creature.Origin                = model.Origin;
            creature.ReefCompatability     = model.ReefCompatability;
            creature.Temperament           = model.Temperament;
            creature.Volume                = model.Volume;
            creature.SpecialRequirements   = model.SpecialRequirements;
            creature.SubcategoryId         = model.SubcategoryId;

            //Update creature image.
            if (upload != null)
            {
                var webRoot = _hostingEnvironment.WebRootPath + Directory;

                var path = Path.Combine(webRoot, upload.FileName);
                if (!System.IO.File.Exists(path))
                {
                    using (var fs = System.IO.File.Create(path))
                    {
                        upload.CopyTo(fs);
                        fs.Flush();
                        fs.Close();
                    }
                }

                if (creature.Media == null)
                {
                    var media = new Media()
                    {
                        ContentType = upload.ContentType,
                        Filename    = upload.FileName,
                        Url         = Directory
                    };
                    creature.Media = media;
                }

                if (upload.FileName != creature.Media?.Filename)
                {
                    creature.Media.ContentType = upload.ContentType;
                    creature.Media.Filename    = upload.FileName;
                    creature.Media.Url         = Directory;
                }
            }

            var creatureTags = creature.CreatureTags.ToList();

            if (creatureTags.Any())
            {
                var itemsToDelete = new List <CreatureTag>();

                if (model.TagList != null && model.TagList.Any())
                {
                    itemsToDelete = creatureTags.Where(x => !model.TagList.Contains(x.TagId)).ToList();
                }

                foreach (var tag in itemsToDelete)
                {
                    _creatureRepository.DeleteCreatureTag(tag);
                    creatureTags.Remove(tag);
                }
            }

            if (model.TagList != null)
            {
                // Check which tags are already coupled to this creature and which tags stay coupled. these can be ignored.
                var newTagIds = model.TagList.Where(x => creatureTags.All(sa => sa.TagId != x)).ToList();

                //Couple checked activities to the student group.
                foreach (var tagId in newTagIds)
                {
                    var creatureTag = new CreatureTag()
                    {
                        CreatureId = creature.Id,
                        TagId      = tagId,
                    };

                    _creatureTagRepository.Add(creatureTag);
                }
            }

            _creatureRepository.Save(creature);
        }