public HttpResponseMessage Enrol(string code)
        {
            ServerUtils.LogTelemetryEvent(User.Identity.Name, "Enrol");

            ServiceData.Models.Study found = _studyRepository.Search(
                st => st.Code == code
                ).FirstOrDefault();

            ServiceData.Models.User thisUser = _userRepository.Search(
                usr => usr.Email == User.Identity.Name
                ).FirstOrDefault();

            if (found != null && thisUser != null &&
                !found.StudyEnrolments.Any(en => en.UserId == thisUser.Id))
            {
                Models.StudyEnrolment enrol = new Models.StudyEnrolment
                {
                    CreatedAt = DateTime.UtcNow,
                    StudyId   = found.Id,
                    Enrolled  = true,
                    UserId    = thisUser.Id
                };

                var serviceMod = Models.StudyEnrolment.ToServiceModel(enrol, true, true);
                var finalRes   = _studyEnrolmentRepository.Insert(serviceMod);
                return(Request.CreateResponse(HttpStatusCode.OK, finalRes));
            }

            return(Request.CreateResponse(HttpStatusCode.NotFound));
        }
        public HttpResponseMessage GetMyEnrols()
        {
            List <ServiceData.Models.StudyEnrolment> found = _studyEnrolmentRepository.Search(
                en => en.User.Email == User.Identity.Name).ToList();

            List <Models.StudyEnrolment> toRet = new List <Models.StudyEnrolment>();

            foreach (ServiceData.Models.StudyEnrolment en in found)
            {
                // Clear out some potentially sensitive info
                Models.StudyEnrolment toAdd = Models.StudyEnrolment.ToAppModel(en, true, false);
                toAdd.Study.StudyEnrolments    = null;
                toAdd.Study.Manager.Conditions = null;
                toRet.Add(toAdd);
            }
            return(Request.CreateResponse(HttpStatusCode.OK, toRet));
        }
        public async Task <ActionResult> Details([Bind(Include = "Email,Id")] AddParticipantStruct newPart)
        {
            IReadWriteRepository <ServiceData.Models.User> _userRepository = new UserRepository();

            ServiceData.Models.User res =
                await _userRepository.Search(u => u.Email == newPart.Email).FirstOrDefaultAsync();

            IReadWriteRepository <ServiceData.Models.Study> _studyRepository = new StudyRepository();

            ServiceData.Models.Study study = _studyRepository.GetById(newPart.Id);

            if (study == null)
            {
                return(RedirectToAction("Index"));
            }
            else if (res != null &&
                     study.Manager.Email == User.Identity.Name &&
                     !study.StudyEnrolments.Any(en => en.UserId == res.Id))
            {
                Models.StudyEnrolment enrol = new Models.StudyEnrolment
                {
                    CreatedAt = DateTime.UtcNow,
                    Study     = Models.Study.ToAppModel(study, false),
                    StudyId   = study.Id,
                    Enrolled  = true,
                    User      = Models.User.ToAppModel(res),
                    UserId    = res.Id
                };

                IReadWriteRepository <ServiceData.Models.StudyEnrolment> _enrolRepository = new StudyEnrolmentRepository();
                var serviceMod = Models.StudyEnrolment.ToServiceModel(enrol, true, true);
                var finalRes   = _enrolRepository.Insert(serviceMod);
                return(RedirectToAction("Details", new { id = study.Id }));
            }

            return(RedirectToAction("Details", new { id = study?.Id }));
        }