public virtual ResponseResource AcceptMembershipApplication(IPrincipal principal, MembershipApplicationAcceptanceRequest request) { var user = _dependencies.UserService.GetGuaranteedAuthenticatedUser(principal); var application = _dependencies.StorageService.SetOf <MembershipApplication>().SingleOrDefault(x => x.Id == request.Id); if (application == null) { return(new ResponseResource { HasError = true, Error = "Application not found." }); } _dependencies.OrganisationService.GuaranteeUserHasPermission(user, application.Organisation, ShurahOrganisationPermission.AcceptMembershipApplication); var currentMember = _dependencies.OrganisationService.GetGuaranteedMember(principal, application.OrganisationId); var existingAcceptance = application.Acceptances.SingleOrDefault(x => x.AcceptingMemberId == currentMember.Id); if (existingAcceptance != null) { return(new ResponseResource { HasError = true, Error = "You have already accepted this application." }); } var acceptance = _dependencies.StorageService.SetOf <MembershipApplicationAcceptance>().Create(); acceptance.AcceptingMemberId = currentMember.Id; acceptance.AcceptanceDateTimeUtc = DateTime.UtcNow; acceptance.AcceptingMember = currentMember; acceptance.MembershipApplication = application; acceptance.MembershipApplicationId = application.Id; _dependencies.StorageService.SetOf <MembershipApplicationAcceptance>().Add(acceptance); _dependencies.StorageService.SaveChanges(); var acceptancesCount = application.Acceptances.Count(x => !x.AcceptingMember.Removed); if (acceptancesCount >= application.Organisation.RequiredNumbersOfAcceptingMembers) { var existingMembership = application.Organisation.Members.FirstOrDefault( m => m.MemberAuth0Users.Any(a => a.Auth0UserId == application.Auth0UserId)); if (existingMembership == null) { existingMembership = _dependencies.StorageService.SetOf <Member>().Create(); _dependencies.StorageService.SetOf <Member>().Add(existingMembership); } existingMembership.OrganisationId = application.OrganisationId; existingMembership.PublicName = application.PublicName; existingMembership.EmailAddress = application.Email; existingMembership.Introduction = ""; existingMembership.JoinedOnDateAndTimeUtc = DateTime.UtcNow; existingMembership.LastDateAndTimeUtcAgreedToMembershipRules = DateTime.UtcNow; existingMembership.Organisation = application.Organisation; existingMembership.Removed = false; _dependencies.StorageService.SaveChanges(); var existingMemberAuth0User = _dependencies.StorageService.SetOf <MemberAuth0User>() .SingleOrDefault( x => x.Auth0UserId == acceptance.MembershipApplication.Auth0UserId && x.MemberId == existingMembership.Id); if (existingMemberAuth0User == null) { existingMemberAuth0User = _dependencies.StorageService.SetOf <MemberAuth0User>().Create(); existingMemberAuth0User.Auth0UserId = acceptance.MembershipApplication.Auth0UserId; existingMemberAuth0User.Auth0User = acceptance.MembershipApplication.Auth0User; existingMemberAuth0User.MemberId = existingMembership.Id; existingMemberAuth0User.Member = existingMembership; _dependencies.StorageService.SetOf <MemberAuth0User>().Add(existingMemberAuth0User); } existingMemberAuth0User.Suspended = false; _dependencies.StorageService.SaveChanges(); } return(new ResponseResource()); }
public ResponseResource Post([FromBody] MembershipApplicationAcceptanceRequest request) { return(_service.AcceptMembershipApplication(User, request)); }
public HttpResponseMessage Post(MembershipApplicationAcceptanceRequest request) { return(Request.CreateResponse(HttpStatusCode.OK, _service.AcceptMembershipApplication(User, request))); }