Exemple #1
0
        public async Task <IActionResult> Register([FromBody] RegisterAccountModel model)
        {
            // check the phone is already registered or not
            var isPhoneNumberExist = _userService.IsUserPhoneNumberExist(model.PhoneNumber);

            if (isPhoneNumberExist)
            {
                return(Conflict("Phone number already exist"));
            }

            var result = await _authServices.Register(new RegisterModel
            {
                Username        = model.Email,
                Email           = model.Email,
                Password        = model.Password,
                CellPhone       = model.PhoneNumber,
                ConfirmPassword = model.Password
            }, true, true);


            if (result.Result.Succeeded)
            {
                AssignModelState();
                var response = _userDetailService.Create(new UserDetailMediCoreModel
                {
                    Id        = 0,
                    FirstName = model.FirstName,
                    LastName  = model.LastName,
                    UserId    = result.UserId
                });

                if (!String.IsNullOrWhiteSpace(result.GeneratedToken))
                {
                    var    callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = result.UserId, code = result.GeneratedToken }, protocol: HttpContext.Request.Scheme);
                    var    sendgrid    = _sender.Create(SenderFactory.EMAIL);
                    string template    = TemplateGenerator.GenerateTemplate(new TemplateOption
                    {
                        TemplateType       = TemplateType.Activation,
                        TemplateFolderPath = String.Format("{0}/{1}/{2}", _hostingEnvironment.ContentRootPath, "Resources", "Template")
                    });

                    template = template.Replace("{CONFIRMATION_LINK}", callbackUrl);
                    template = template.Replace("{FIRST_NAME}", model.FirstName);

                    //send email confirmation to user
                    await sendgrid.SendAsync(model.Email, "Aktivasi", template);
                }

                if (!String.IsNullOrWhiteSpace(result.GenerateSMSToken))
                {
                    var    smsSender = _sender.Create(SenderFactory.SMS);
                    string template  = TemplateGenerator.GenerateSMSTemplate(new TemplateOption
                    {
                        TemplateType       = TemplateType.Activation,
                        TemplateFolderPath = String.Format("{0}/{1}/{2}", _hostingEnvironment.ContentRootPath, "Resources", "Template")
                    });
                    template = template.Replace("{TOKEN}", result.GenerateSMSToken);
                    await smsSender.SendAsync(model.PhoneNumber, "Aktivasi", template);
                }

                if (response.Success)
                {
                    return(Ok(response.Item));
                }
                return(BadRequest(response.Message));
            }

            return(BadRequest(result.Result.Errors.FirstOrDefault()));
        }