コード例 #1
0
        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));
        }