public async Task <IActionResult> RegisterFarmer([FromBody] RegisterFarmerViewModel model) { try { var salt = Guid.NewGuid().ToString(); var password = $"{model.Password + salt}"; var passwordHash = _userManager.PasswordHasher.HashPassword(new User(), password); var farmer = new Farmer { FirstName = model.FirstName, LastName = model.LastName, Address = model.Address, Email = model.Email, Phone = model.Phone }; var user = new User { UserName = model.Email, Email = model.Email, HashSalt = salt, PasswordHash = passwordHash, PhoneNumber = model.Phone }; var result = await _farmerRepository.RegisterFarmer(user, farmer); switch (result.Status) { case Status.Success: var token = await GetToken(user); var response = new TokenRequestModel { Status = "success", Message = "account registration successful", Token = new JwtSecurityTokenHandler().WriteToken(token), Expires = token.ValidTo, Data = result.Data }; return(CreatedAtAction("profile", "farmer", null, response)); default: return(BadRequest(new ErrorModel { Status = "error", Message = $"cannot register user {model.Email}", Data = result.Data })); } } catch (Exception ex) { var response = new ErrorModel { Status = "error", Message = $"{ex.Message}", }; return(BadRequest(response)); } }