public async Task <IAccountResult> Register(RegisterModel model) { // todo: improve ACIDity var invite = await inviteService.FindInvite(model.InviteCode); if (invite is null) { return(new FailedAccountResult($"Invalid invite code: {model.InviteCode}")); } if (await userManager.FindByNameAsync(model.Username) is not null) { return(new FailedAccountResult("Username already taken")); } var newUser = new LocalistUser(model.Username, model.InviteCode); var createUserResult = await userManager.CreateAsync(newUser, model.Password); if (!createUserResult.Succeeded) { return(new FailedAccountResult(string.Join(", ", createUserResult.Errors.Select(x => x.Description)))); } await UpdateInviteAndCreateProfileForUser(model.Username, invite); return(new AccountResult(Successful: true)); }