public override async Task <SignUpReply> SignUpByEmail(SignUpByEmailRequest request, ServerCallContext context)
        {
            var command = new SignUpByEmailCommand(
                new EmailIdentity(request.Email),
                request.Password,
                _language,
                ParseIpAddress(request.Ip)
                );
            var data = await _mediator.Send(command);

            return(data.ToSignUpReply());
        }
        public async Task SignUpByEmailShouldBeSucceed()
        {
            var dateTimeBeforeSignUp = DateTime.UtcNow;

            /* sign up using service */
            var expectedUser      = UserFactory.GenerateUserUsingEmail();
            var requestBodyObject = new SignUpByEmailRequest
            {
                Email     = expectedUser.Email,
                Password  = UserFactory.DefaultPassword,
                FirstName = expectedUser.FirstName,
                LastName  = expectedUser.LastName
            };

            var content = new StringContent(JsonConvert.SerializeObject(requestBodyObject), Encoding.UTF8, "application/json");

            var httpResponse = await _apiFixture.Client.PostAsync(_apiFixture.ApplicationSettings.AuthServiceAPISettings.SignUpByEmailUrl, content);

            httpResponse.EnsureSuccessStatusCode();

            var actualUserReponse = JsonConvert.DeserializeObject <UserResponse>(
                await httpResponse.Content.ReadAsStringAsync());

            /* check if the created user response is match with expected user */

            Assert.NotNull(actualUserReponse);
            Assert.NotNull(actualUserReponse.Id);
            Assert.Equal(expectedUser.Email, actualUserReponse.Email);
            Assert.Equal(expectedUser.FirstName, actualUserReponse.FirstName);
            Assert.Equal(expectedUser.LastName, actualUserReponse.LastName);
            Assert.True(expectedUser.SignUpDate > dateTimeBeforeSignUp);

            /* check again if the user stored in database is match with expected user */
            var actualUser = _persistenceFixture.GetUserByEmail(expectedUser.Email);

            Assert.NotNull(actualUser);
            Assert.Equal(expectedUser.Email, actualUser.Email);
            Assert.Equal(expectedUser.FirstName, actualUser.FirstName);
            Assert.Equal(expectedUser.LastName, actualUser.LastName);
            Assert.True(expectedUser.SignUpDate > dateTimeBeforeSignUp);
        }
        public async Task <IActionResult> SignUpByEmailAsync(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = "sign-up-by-email")] HttpRequest req,
            ILogger log)
        {
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

            var signUpByEmailRequest = JsonConvert.DeserializeObject <SignUpByEmailRequest>(requestBody);

            var invalidParameters = new SignUpByEmailRequest();

            Email    email     = null;
            Password password  = null;
            Name     firstName = null;
            Name     lastName  = null;

            try
            {
                email = signUpByEmailRequest.Email;
            }
            catch (ParameterException e)
            {
                invalidParameters.Email = e.Message;
            }

            try
            {
                password = signUpByEmailRequest.Password;
            }
            catch (ParameterException e)
            {
                invalidParameters.Password = e.Message;
            }

            try
            {
                firstName = signUpByEmailRequest.FirstName;
            }
            catch (ParameterException e)
            {
                invalidParameters.FirstName = e.Message;
            }

            try
            {
                lastName = signUpByEmailRequest.LastName;
            }
            catch (ParameterException e)
            {
                invalidParameters.LastName = e.Message;
            }

            if (email == null ||
                password == null ||
                firstName == null ||
                lastName == null)
            {
                return(new BadRequestObjectResult(
                           new ErrorParametersResponse
                {
                    InvalidParametersObject = invalidParameters
                }));
            }

            try
            {
                var user = await _signUpUseCase.SignUpByEmail(
                    email : email,
                    password : password,
                    firstName : firstName,
                    lastName : lastName);

                return(new CreatedResult(
                           "",
                           UserResponse.Load(user)));
            }
            catch (ConflictException e)
            {
                return(new ConflictObjectResult(
                           ErrorResponse.Conflict(
                               message: e.Message
                               )));
            }
            catch (DomainException e)
            {
                return(new BadRequestObjectResult(
                           ErrorResponse.BadRequest(
                               message: e.Message
                               )));
            }
        }