merge method
Future<void>
merge(
- Session session, {
- required UuidValue userToKeepId,
- required UuidValue userToRemoveId,
- Transaction? transaction,
Merges the accounts of two AuthUsers.
This method invokes the callbacks defined in the AccountMergeConfig.mergeHooks.
Throws an AuthUserNotFoundException if either user is not found.
Throws an ArgumentError if userToKeepId and userToRemoveId are equal.
Implementation
Future<void> merge(
final Session session, {
required final UuidValue userToKeepId,
required final UuidValue userToRemoveId,
final Transaction? transaction,
}) async {
if (userToKeepId == userToRemoveId) {
throw ArgumentError.value(
userToRemoveId,
'userToRemoveId',
'The user to remove must be different from the user to keep.',
);
}
return DatabaseUtil.runInTransactionOrSavepoint(session.db, transaction, (
final transaction,
) async {
final users = await Future.wait([
AuthUser.db.findById(
session,
userToKeepId,
transaction: transaction,
),
AuthUser.db.findById(
session,
userToRemoveId,
transaction: transaction,
),
]);
final userToKeepEntity = users[0];
final userToRemoveEntity = users[1];
if (userToKeepEntity == null || userToRemoveEntity == null) {
throw AuthUserNotFoundException();
}
for (final AccountMergeHandler hook in _config.mergeHooks) {
await hook(
session,
userToKeepId: userToKeepId,
userToRemoveId: userToRemoveId,
transaction: transaction,
);
}
});
}