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

            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> AddArchive(AddArchive viewModel)
        {
            await CheckName(viewModel);

            Archive archive = new()
            {
                Name = viewModel.Name,
                By   = await FindApplicationUserByEmail(viewModel.By.Email),
                ApplicationUserArchives = new List <ApplicationUserArchive>(),
                ArchiveVersions         = new List <ArchiveVersion>()
            };

            await Context.Archive.AddAsync(archive);

            AddApplicationUserArchive(viewModel, archive);

            AddArchiveVersion(viewModel, archive);

            await Context.SaveChangesAsync();

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

            Logger.WriteInsertItemLog(logData);

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

            entity.ArchiveVersions.Add(archiveVersion);
        }
        public void AddApplicationUserArchive(AddArchive 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);
            });
        }