public virtual ResponseResource ApplyToJoin(IPrincipal principal, MembershipApplicationrequest request)
        {
            if (!request.AgreesToTermsAndConditions)
            {
                return(new ResponseResource {
                    HasError = true, Error = "You must agree to the terms and conditions"
                });
            }
            var user = _dependencies.UserService.GetGuaranteedAuthenticatedUser(principal);

            var existingMemberWithSameEmailAddress = _dependencies.StorageService.SetOf <Member>()
                                                     .FirstOrDefault(m => m.OrganisationId == request.OrganisationId &&
                                                                     !m.Removed &&
                                                                     m.MemberAuth0Users.Any(a => a.Auth0UserId != user.Id) &&
                                                                     m.EmailAddress == request.EmailAddress);

            if (existingMemberWithSameEmailAddress != null)
            {
                return(new ResponseResource {
                    HasError = true, Error = "Email Address already used by another member"
                });
            }

            var existingMemberWithSamePublicName = _dependencies.StorageService.SetOf <Member>()
                                                   .FirstOrDefault(x => x.OrganisationId == request.OrganisationId &&
                                                                   x.MemberAuth0Users.Any(m => m.Auth0UserId != user.Id) &&
                                                                   x.PublicName == request.PublicName);

            if (existingMemberWithSamePublicName != null)
            {
                return(new ResponseResource {
                    HasError = true, Error = "Public name already used by another member"
                });
            }

            var existingApplication =
                user.MembershipApplications.SingleOrDefault(a => a.OrganisationId == request.OrganisationId);

            if (existingApplication == null)
            {
                existingApplication                = new MembershipApplication();
                existingApplication.Auth0User      = user;
                existingApplication.Auth0UserId    = user.Id;
                existingApplication.Auth0UserId    = user.Id;
                existingApplication.OrganisationId = request.OrganisationId;
                _dependencies.StorageService.SetOf <MembershipApplication>().Add(existingApplication);
            }
            existingApplication.Email = request.EmailAddress;
            existingApplication.SupportingStatement = request.PublicProfileStatement;
            existingApplication.PhoneNumber         = request.PhoneNumber;
            existingApplication.PublicName          = request.PublicName;
            existingApplication.DateAppliedUtc      = DateTime.UtcNow;
            _dependencies.StorageService.SaveChanges();

            //TODO send email / sms to organisation leader / members with application approval rights

            return(new ResponseResource());
        }
 public ResponseResource Post([FromBody] MembershipApplicationrequest request)
 {
     return(_service.ApplyToJoin(User, request));
 }
Пример #3
0
 public HttpResponseMessage Post(MembershipApplicationrequest request)
 {
     return(Request.CreateResponse(HttpStatusCode.OK, _service.ApplyToJoin(User, request)));
 }