public async Task <Archive> CheckName(UpdateArchive viewModel)
        {
            Archive archive = await Context.Archive
                              .TagWith("CheckName")
                              .AsNoTracking()
                              .FirstOrDefaultAsync(x => x.Name == viewModel.Name && x.Id != viewModel.Id);

            if (archive != null)
            {
                // Log
                string logData = archive.GetType().Name
                                 + " with Name "
                                 + archive.Name
                                 + " was already found at "
                                 + DateTime.Now.ToShortTimeString();

                Logger.WriteGetItemFoundLog(logData);

                throw new Exception(archive.GetType().Name
                                    + " with Name "
                                    + viewModel.Name
                                    + " already exists");
            }

            return(archive);
        }
        public async Task <ViewArchive> UpdateArchive(UpdateArchive viewModel)
        {
            await CheckName(viewModel);

            Archive archive = await FindArchiveById(viewModel.Id);

            archive.Name = viewModel.Name;
            archive.By   = await FindApplicationUserByEmail(viewModel.By.Email);

            archive.ApplicationUserArchives = new List <ApplicationUserArchive>();

            Context.Archive.Update(archive);

            UpdateApplicationUserArchive(viewModel, archive);

            UpdateArchiveVersion(viewModel, archive);

            await Context.SaveChangesAsync();

            // Log
            string logData = archive.GetType().Name
                             + " with Id "
                             + archive.Id
                             + " was modified at "
                             + DateTime.Now.ToShortTimeString();

            Logger.WriteUpdateItemLog(logData);

            return(Mapper.Map <ViewArchive>(archive));
        }
        public void UpdateArchiveVersion(UpdateArchive viewModel, Archive entity)
        {
            ArchiveVersion archiveVersion = new()
            {
                Archive = entity,
                Data    = viewModel.Data,
                Size    = viewModel.Size,
                Type    = viewModel.Type
            };

            entity.ArchiveVersions.Add(archiveVersion);
        }
        public void UpdateApplicationUserArchive(UpdateArchive viewModel, Archive entity)
        {
            viewModel.ApplicationUsersId.AsQueryable().ToList().ForEach(async x =>
            {
                ApplicationUser applicationUser = await FindApplicationUserById(x);

                ApplicationUserArchive arenalPoblacion = new()
                {
                    Archive         = entity,
                    ApplicationUser = applicationUser,
                };

                entity.ApplicationUserArchives.Add(arenalPoblacion);
            });
        }