public IHttpActionResult InviteUserByHhIdEmail(int id, InviteUserBindingModel formData) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var email = formData.Email; var household = HouseholdHelper.GetByIdWithInvitedJoinedUsers(id); if (household == null) { return(NotFound()); } var currentUserId = User.Identity.GetUserId(); var IsNotOwner = household.IsNotOwner(currentUserId); if (IsNotOwner) { return(Unauthorized()); } var user = UserHelper.GetUserByEmail(email); if (user == null) { ModelState.AddModelError("email", "The user doesn't not exist"); return(BadRequest(ModelState)); } var alreadyInvited = household.AlreadyInvitedByEmail(email); var alreadyJoined = household.AlreadyJoinedByEmail(email); if (alreadyInvited) { ModelState.AddModelError("Email", "The user was already invitated."); return(BadRequest(ModelState)); } else if (alreadyJoined) { ModelState.AddModelError("Email", "The user was already joined. Cannot be invitated."); return(BadRequest(ModelState)); } else { household.InvitedUsers.Add(user); DbContext.SaveChanges(); } var eService = new EmailService(); var subject = $"Invitation to Household {id}"; var callbackUrl = Url.Link("DefaultApi", new { Action = "JoinHouseholdById", household.Id }); var body = $"If you would like to join in it" + $", plesae post the link: <a href=\"" + callbackUrl + "\">here</a> ."; eService.Send(email, subject, body); var model = Mapper.Map <ShowUsersViewModel>(user); return(Ok(model)); }