Esempio n. 1
0
        public async Task <PasswordDetailViewModel> EditPasswordAsync(PasswordEditInputModel par_InputModel)
        {
            bool bPasswordNonDuplicata = await DescrizioneDuplicataAsync(par_InputModel.Descrizione, par_InputModel.Id);

            if (bPasswordNonDuplicata == false)
            {
                throw new PasswordDescrizioneDuplicataException(par_InputModel.Descrizione, new Exception("errore nella creazione della password"));
            }
            string sFilePath = null;

            if (par_InputModel.FilePassword != null)
            {
                try
                {
                    sFilePath = await par_ImagePersister.SavePasswordImageAsync(par_InputModel.Id, par_InputModel.FilePassword);
                }
                catch (System.Exception exc)
                {
                    throw new PasswordImageInvalidException(par_InputModel.Id, exc);
                }
            }
            int var_NumRigheUpd = await db.CommandAsync($@"UPDATE Passwords 
                                                        SET PathFile=COALESCE({sFilePath}, PathFile), 
                                                        Password={par_InputModel.Password}, 
                                                        Descrizione={par_InputModel.Descrizione}, 
                                                        DataInserimento={par_InputModel.DataInserimento}, 
                                                        FkUtente={par_InputModel.FkUtente}, 
                                                        Sito={par_InputModel.Sito}, 
                                                        Tipo={par_InputModel.Tipo} 
                                                        WHERE Id={par_InputModel.Id} AND RowVersion={par_InputModel.RowVersion}");

            if (var_NumRigheUpd == 0)
            {
                int var_RecordTrovato = await db.QueryScalarAsync <int>($"SELECT COUNT(*) FROM Passwords WHERE Id={par_InputModel.Id}");

                if (var_RecordTrovato > 0)
                {
                    throw new DBConcurrencyException("Non e' possibile effettuare l'update perche un altro utente ha effettuato delle modifiche.");
                }
                else
                {
                    throw new PasswordNotFoundException(par_InputModel.Id);
                }
            }
            PasswordDetailViewModel var_Password = await GetPasswordAsync(par_InputModel.Id.ToString());

            return(var_Password);
        }
        public async Task <PasswordDetailViewModel> EditPasswordAsync(PasswordEditInputModel par_InputModel)
        {
            string sDescrizione          = par_InputModel.Descrizione;
            bool   bPasswordNonDuplicata = await DescrizioneDuplicataAsync(sDescrizione, par_InputModel.Id);

            if (bPasswordNonDuplicata == true)
            {
                Passwords var_Password = await dbContext.Passwords.FindAsync(par_InputModel.Id);

                var_Password.ChangePassword(par_InputModel.Password);
                var_Password.Descrizione     = par_InputModel.Descrizione;
                var_Password.DataInserimento = par_InputModel.DataInserimento;
                var_Password.FkUtente        = par_InputModel.FkUtente;
                var_Password.Sito            = par_InputModel.Sito;
                var_Password.Tipo            = par_InputModel.Tipo;

                dbContext.Entry(var_Password).Property(var_Password => var_Password.RowVersion).OriginalValue = par_InputModel.RowVersion;

                if (par_InputModel.FilePassword != null)
                {
                    try
                    {
                        string sFilePath = await par_ImagePersister.SavePasswordImageAsync(par_InputModel.Id, par_InputModel.FilePassword);

                        var_Password.PathFile = sFilePath;
                    }
                    catch (System.Exception exc)
                    {
                        throw new PasswordImageInvalidException(par_InputModel.Id, exc);
                    }
                }

                try
                {
                    await dbContext.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    throw new DBConcurrencyException("Non e' possibile effettuare l'update perche un altro utente ha effettuato delle modifiche.");
                }
                PasswordDetailViewModel var_PasswordDetailViewModel = PasswordDetailViewModel.FromEntity(var_Password);
                return(var_PasswordDetailViewModel);
            }
            else
            {
                throw new PasswordDescrizioneDuplicataException(sDescrizione, new Exception("errore nella creazione della password"));
            }
        }