public async Task <DbStatus> Add(LocalAccount localAccount) { List <string> commandsToExecute = new List <string>(); IConnector connector = ConnectorFactory.CreateConnector(); MySqlConnection connection = connector.CreateConnection(); await connector.OpenConnection(connection); LocalAccount currentAccount = await GetByUniqueIdentifiers(new string[] { "Email" }, localAccount); if (currentAccount != null && currentAccount.Deleted == 0) { return(DbStatus.EXISTS); } else if (currentAccount != null && currentAccount.Deleted == 1) { DeleteOrUpdateRoles(currentAccount, localAccount, commandsToExecute, connection); commandsToExecute.Add(new InsertOrUpdateCommand <LocalAccount>().GetCommand(connection, localAccount.GetAssociatedDbTableName(), localAccount).CommandText); } else { commandsToExecute.Add(new InsertCommand <LocalAccount>().GetCommand(connection, localAccount.GetAssociatedDbTableName(), localAccount).CommandText); foreach (var role in localAccount.GetRoles()) { LocalAccountRole lr = new LocalAccountRole() { IdRole = role.IdRole }; commandsToExecute.Add(new InsertIntoConnectionTableCommand <LocalAccountRole>("IdLocalAccount").GetCommand(connection, lr.GetAssociatedDbTableName(), lr).CommandText); } } DbTransactionProcedure transactionProcedure = new UpdateDbTransactionProcedure(commandsToExecute.ToArray()); DbStatus status = await transactionProcedure.Execute(); return(status); }
public async Task <DbStatus> Delete(LocalAccount localAccount) { List <string> commandsToExecute = new List <string>(); IConnector connector = ConnectorFactory.CreateConnector(); MySqlConnection connection = connector.CreateConnection(); await connector.OpenConnection(connection); foreach (var role in localAccount.GetRoles()) { LocalAccountRole lr = new LocalAccountRole() { IdLocalAccount = localAccount.IdLocalAccount, IdRole = role.IdRole }; commandsToExecute.Add(new DeleteCommand <LocalAccountRole>().GetCommand(connection, lr.GetAssociatedDbTableName(), lr).CommandText); } commandsToExecute.Add(new DeleteCommand <LocalAccount>().GetCommand(connection, localAccount.GetAssociatedDbTableName(), localAccount).CommandText); DbTransactionProcedure transactionProcedure = new DeleteDbTransactionProcedure(commandsToExecute.ToArray()); DbStatus status = await transactionProcedure.Execute(); return(status); }
private void DeleteOrUpdateRoles(LocalAccount currentAccount, LocalAccount localAccount, List <string> commandsToExecute, MySqlConnection connection) { var rolesToDelete = currentAccount.GetRoles().Except(localAccount.GetRoles()); var rolesToAdd = localAccount.GetRoles().Except(currentAccount.GetRoles()); foreach (var role in rolesToDelete) { LocalAccountRole lr = new LocalAccountRole() { IdLocalAccount = currentAccount.IdLocalAccount, IdRole = role.IdRole }; commandsToExecute.Add(new DeleteCommand <LocalAccountRole>().GetCommand(connection, lr.GetAssociatedDbTableName(), lr).CommandText); } foreach (var role in rolesToAdd) { LocalAccountRole lr = new LocalAccountRole() { IdRole = role.IdRole, IdLocalAccount = currentAccount.IdLocalAccount, Deleted = 0 }; commandsToExecute.Add(new InsertOrUpdateCommand <LocalAccountRole>().GetCommand(connection, lr.GetAssociatedDbTableName(), lr).CommandText); } }