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)); }
public HttpResponseMessage Post(MembershipApplicationrequest request) { return(Request.CreateResponse(HttpStatusCode.OK, _service.ApplyToJoin(User, request))); }