- final var response = dependencies.getAccountManager()
- .reserveUsername(List.of(Base64.encodeUrlSafeWithoutPadding(username.getHash())));
- logger.debug("[reserveUsername] Successfully reserved existing username.");
- dependencies.getAccountManager().confirmUsername(username.getUsername(), response);
- logger.debug("[confirmUsername] Successfully confirmed existing username.");
- tryToSetUsernameLink(username);
+ final var usernameLink = account.getUsernameLink();
+
+ if (usernameLink == null) {
+ dependencies.getAccountManager()
+ .reserveUsername(List.of(Base64.encodeUrlSafeWithoutPadding(username.getHash())));
+ logger.debug("[reserveUsername] Successfully reserved existing username.");
+ final var linkComponents = dependencies.getAccountManager().confirmUsernameAndCreateNewLink(username);
+ account.setUsernameLink(linkComponents);
+ logger.debug("[confirmUsername] Successfully confirmed existing username.");
+ } else {
+ final var linkComponents = dependencies.getAccountManager().reclaimUsernameAndLink(username, usernameLink);
+ account.setUsernameLink(linkComponents);
+ logger.debug("[confirmUsername] Successfully reclaimed existing username and link.");
+ }