Exemplo n.º 1
0
        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));
        }