예제 #1
0
        public IActionResult GetAllUsers()
        {
            using (var client = _client)
            {
                var response = client.GetAsync(BuildUrl <User>());
                var decoded  = response.Result.Content.ReadAsStringAsync().Result;
                var result   = JsonConvert.DeserializeObject <ODataResponse <CrmUser> >(decoded);

                if (result.Value == null)
                {
                    return(NotFound());
                }

                var users = result.Value.Select(x => new User(x));

                serializer = new OneRosterSerializer("users");
                serializer.writer.WriteStartArray();
                foreach (var user in users)
                {
                    user.AsJson(serializer.writer, BaseUrl());
                }
                serializer.writer.WriteEndArray();

                return(JsonOk(FinishSerialization(), users.Count()));
            }
        }
예제 #2
0
        public IActionResult GetClassesForTeacher([FromRoute] string id)
        {
            if (db.Users.SingleOrDefault(u => u.Id == id) == null)
            {
                return(NotFound());
            }

            IQueryable <IMSClass> imsClassQuery = db.IMSClasses
                                                  .Include(k => k.Enrollments).ThenInclude(e => e.User)
                                                  .Include(k => k.Enrollments).ThenInclude(e => e.IMSClass.Course)
                                                  .Include(k => k.Enrollments).ThenInclude(e => e.IMSClass.School)
                                                  .Include(k => k.Enrollments).ThenInclude(e => e.IMSClass.IMSClassAcademicSessions).ThenInclude(kas => kas.AcademicSession)
                                                  .Where(k => k.Enrollments.Where(e => e.UserId == id && e.Role == Vocabulary.RoleType.teacher).Count() > 0);

            imsClassQuery = ApplyBinding(imsClassQuery);
            var imsClasses = imsClassQuery.ToList();

            serializer = new OneRosterSerializer("classes");
            serializer.writer.WriteStartArray();
            foreach (var imsClass in imsClasses)
            {
                imsClass.AsJson(serializer.writer, BaseUrl());
            }
            serializer.writer.WriteEndArray();

            return(JsonOk(FinishSerialization(), ResponseCount));
        }
예제 #3
0
        public IActionResult GetTeachersForClassInSchool([FromRoute] string schoolId, string classId)
        {
            var imsClass = db.IMSClasses
                           .Where(c => c.SchoolOrgId == schoolId)
                           .Include(c => c.Enrollments)
                           .ThenInclude(e => e.User)
                           .ThenInclude(u => u.UserOrgs)
                           .ThenInclude(uo => uo.Org)
                           .Include(c => c.Enrollments)
                           .ThenInclude(e => e.User)
                           .ThenInclude(u => u.UserAgents)
                           .ThenInclude(ua => ua.Agent)
                           .SingleOrDefault(c => c.Id == classId);

            if (imsClass == null)
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("teachers");
            serializer.writer.WriteStartArray();
            foreach (var enrollment in imsClass.Enrollments)
            {
                var user = enrollment.User;
                if (user.Role == Vocabulary.RoleType.teacher)
                {
                    user.AsJson(serializer.writer, BaseUrl());
                }
            }
            serializer.writer.WriteEndArray();
            return(JsonOk(serializer.Finish()));
        }
예제 #4
0
        public IActionResult GetClassesForStudent([FromRoute] string id)
        {
            var student = db.Users
                          .Include(u => u.UserOrgs).ThenInclude(uo => uo.Org)
                          .Include(u => u.UserAgents).ThenInclude(ua => ua.Agent)
                          .Include(u => u.Enrollments).ThenInclude(e => e.IMSClass)
                          .ThenInclude(k => k.IMSClassAcademicSessions)
                          .ThenInclude(kas => kas.AcademicSession)
                          .Include(u => u.Enrollments).ThenInclude(e => e.IMSClass)
                          .ThenInclude(k => k.Course)
                          .Include(u => u.Enrollments).ThenInclude(e => e.IMSClass)
                          .ThenInclude(k => k.School)
                          .SingleOrDefault(u => u.Id == id && u.Role == Vocabulary.RoleType.student);

            if (student == null || !student.Enrollments.Any())
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("classes");
            serializer.Writer.WriteStartArray();
            foreach (var enrollment in student.Enrollments)
            {
                enrollment.IMSClass.AsJson(serializer.Writer, BaseUrl());
            }
            serializer.Writer.WriteEndArray();
            return(JsonOk(serializer.Finish()));
        }
예제 #5
0
        public IActionResult GetTeachersForSchool([FromRoute] string id)
        {
            var teachers = db.Users
                           .Where(u => u.Role == Vocabulary.RoleType.teacher)
                           .Include(u => u.UserOrgs).ThenInclude(uo => uo.Org)
                           .Include(u => u.UserAgents).ThenInclude(ua => ua.Agent);

            if (!teachers.Any())
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("teachers");
            serializer.writer.WriteStartArray();
            foreach (var teacher in teachers)
            {
                foreach (var org in teacher.UserOrgs)
                {
                    if (org.OrgId == id)
                    {
                        teacher.AsJson(serializer.writer, BaseUrl());
                    }
                }
            }
            serializer.writer.WriteEndArray();
            return(JsonOk(serializer.Finish()));
        }
예제 #6
0
        public IActionResult GetEnrollmentsForClassInSchool([FromRoute] string schoolId, string classId)
        {
            var imsClass = db.IMSClasses
                           .Where(c => c.SchoolOrgId == schoolId)
                           .Include(c => c.Enrollments)
                           .ThenInclude(e => e.User)
                           .Include(c => c.Enrollments)
                           .ThenInclude(e => e.IMSClass)
                           .Include(c => c.Enrollments)
                           .ThenInclude(e => e.School)
                           .SingleOrDefault(c => c.Id == classId);

            if (imsClass == null)
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("enrollments");
            serializer.writer.WriteStartArray();
            foreach (var enrollment in imsClass.Enrollments)
            {
                enrollment.AsJson(serializer.writer, BaseUrl());
            }
            serializer.writer.WriteEndArray();
            return(JsonOk(serializer.Finish()));
        }
예제 #7
0
        public IActionResult GetEnrollmentsForClass([FromRoute] string id)
        {
            using (var client = _client)
            {
                var response = client.GetAsync(BuildUrl <Enrollment>(new string[] { $"class='{{{id}}}'" }));
                var decoded  = response.Result.Content.ReadAsStringAsync().Result;
                var result   = JsonConvert.DeserializeObject <ODataResponse <CrmEnrollment> >(decoded);

                if (result.Value == null)
                {
                    return(NotFound());
                }

                var enrollments = result.Value.Select(x => new Enrollment(x));

                serializer = new OneRosterSerializer("enrollments");
                serializer.writer.WriteStartArray();
                foreach (var enrollment in enrollments)
                {
                    enrollment.AsJson(serializer.writer, BaseUrl());
                }
                serializer.writer.WriteEndArray();

                return(JsonOk(FinishSerialization(), enrollments.Count()));
            }
        }
예제 #8
0
        public IActionResult GetEnrollmentsForSchool([FromRoute] string id)
        {
            IQueryable <Enrollment> enrollments = db.Enrollments
                                                  .Include(e => e.User)
                                                  .Include(e => e.IMSClass)
                                                  .Include(e => e.School)
                                                  .Where(e => e.IMSClass.SchoolOrgId == id);

            enrollments = ApplyBinding(enrollments);

            if (!enrollments.Any())
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("enrollments");
            serializer.Writer.WriteStartArray();
            foreach (var enrollment in enrollments)
            {
                enrollment.AsJson(serializer.Writer, BaseUrl());
            }
            serializer.Writer.WriteEndArray();

            return(JsonOk(serializer.Finish(), ResponseCount));
        }
예제 #9
0
        public IActionResult GetStudentsForSchool([FromRoute] string id)
        {
            IQueryable <User> students = db.Users
                                         .Where(u => u.Role == Vocabulary.RoleType.student)
                                         .Include(u => u.UserOrgs).ThenInclude(uo => uo.Org)
                                         .Include(u => u.UserAgents).ThenInclude(ua => ua.Agent);

            students = ApplyBinding(students);

            if (!students.Any())
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("students");
            serializer.Writer.WriteStartArray();
            foreach (var student in students)
            {
                foreach (var org in student.UserOrgs)
                {
                    if (org.OrgId == id)
                    {
                        student.AsJson(serializer.Writer, BaseUrl());
                    }
                }
            }
            serializer.Writer.WriteEndArray();
            return(JsonOk(serializer.Finish(), ResponseCount));
        }
예제 #10
0
        public IActionResult GetClassesForSchool([FromRoute] string id)
        {
            var imsClasses = db.IMSClasses
                             .Include(k => k.IMSClassAcademicSessions)
                             .ThenInclude(kas => kas.AcademicSession)
                             .Include(k => k.Course)
                             .Include(k => k.School)
                             .Where(k => k.SchoolOrgId == id);

            imsClasses = ApplyBinding(imsClasses);

            if (!imsClasses.Any())
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("classes");
            serializer.Writer.WriteStartArray();
            foreach (var imsClass in imsClasses)
            {
                imsClass.AsJson(serializer.Writer, BaseUrl());
            }
            serializer.Writer.WriteEndArray();
            return(JsonOk(serializer.Finish(), ResponseCount));
        }
예제 #11
0
        public IActionResult PutLineItem([FromRoute] string id)
        {
            var insert   = false;
            var lineItem = db.LineItems.SingleOrDefault(li => li.Id == id);

            if (lineItem == null)
            {
                lineItem = new LineItem()
                {
                    Id = id
                };
                insert = true;
            }

            using (var reader = new StreamReader(Request.Body))
            {
                var requestJson = (JObject)JObject.Parse(reader.ReadToEnd())["lineItem"];

                if (!lineItem.UpdateWithJson(requestJson))
                {
                    return(new StatusCodeResult(422));
                }
            }

            if (TryValidateModel(lineItem))
            {
                if (insert)
                {
                    db.LineItems.Add(lineItem);
                }
                db.SaveChanges();

                db.LineItems
                .Include(li => li.AcademicSession)
                .Include(li => li.IMSClass)
                .Include(li => li.LineItemCategory)
                .Where(li => li.Id == id)
                .First();

                serializer = new OneRosterSerializer("lineItem");
                lineItem.AsJson(serializer.Writer, BaseUrl());
                if (insert)
                {
                    return(JsonWithStatus(serializer.Finish(), null, 201));
                }

                return(JsonOk(serializer.Finish()));
            }
            else
            {
                return(new StatusCodeResult(422));
            }
        }
예제 #12
0
        public IActionResult ErrorResult()
        {
            serializer = new OneRosterSerializer("statusInfoSet");
            SerializeExceptions();

            return(new OneRosterResult
            {
                Content = serializer.Finish(),
                ContentType = "application/json",
                StatusCode = 400
            });
        }
예제 #13
0
        public IActionResult PutResult([FromRoute] string id)
        {
            var insert = false;
            var result = db.Results.SingleOrDefault(r => r.Id == id);

            if (result == null)
            {
                result = new Result()
                {
                    Id = id
                };
                insert = true;
            }

            using (var reader = new StreamReader(Request.Body))
            {
                var requestJson = (JObject)JObject.Parse(reader.ReadToEnd())["result"];

                if (!result.UpdateWithJson(requestJson))
                {
                    return(new StatusCodeResult(422));
                }
            }

            if (TryValidateModel(result))
            {
                if (insert)
                {
                    db.Results.Add(result);
                }
                db.SaveChanges();

                db.Results
                .Include(r => r.LineItem)
                .Include(r => r.Student)
                .Where(r => r.Id == id)
                .First();

                serializer = new OneRosterSerializer("result");
                result.AsJson(serializer.Writer, BaseUrl());

                if (insert)
                {
                    return(JsonWithStatus(serializer.Finish(), null, 201));
                }
                return(JsonOk(serializer.Finish()));
            }
            else
            {
                return(new StatusCodeResult(422));
            }
        }
예제 #14
0
        public IActionResult GetSchool([FromRoute] string id)
        {
            var org = LookupSchool(id);

            if (org == null)
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("org");
            org.AsJson(serializer.writer, BaseUrl());
            return(JsonOk(serializer.Finish()));
        }
예제 #15
0
        public IActionResult GetResource([FromRoute] string id)
        {
            var resource = db.Resources.SingleOrDefault(a => a.Id == id);

            if (resource == null)
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("resource");
            resource.AsJson(serializer.Writer, BaseUrl());
            return(JsonOk(serializer.Finish()));
        }
        public IActionResult GetGradingPeriod(string id)
        {
            var session = db.AcademicSessions.FirstOrDefault(a => a.Id == id && a.Type == Vocabulary.SessionType.gradingPeriod);

            if (session == null)
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("academicSession");
            session.AsJson(serializer.Writer, BaseUrl());
            return(JsonOk(serializer.Finish()));
        }
예제 #17
0
        public IActionResult GetTerm([FromRoute] string id)
        {
            var term = db.AcademicSessions.SingleOrDefault(a => a.Id == id && a.Type == Vocabulary.SessionType.term);

            if (term == null)
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("term");
            term.AsJson(serializer.Writer, BaseUrl());
            return(JsonOk(serializer.Finish()));
        }
        public IActionResult GetAcademicSession([FromRoute] string id)
        {
            var academicSession = db.AcademicSessions.SingleOrDefault(a => a.Id == id);

            if (academicSession == null)
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("academicSession");
            academicSession.AsJson(serializer.writer, BaseUrl());
            return(JsonOk(serializer.Finish()));
        }
        public IActionResult GetCourse([FromRoute] string id)
        {
            var course = db.Courses
                         .Include(c => c.SchoolYearAcademicSession)
                         .Include(c => c.Org)
                         .FirstOrDefault(c => c.Id == id);

            if (course == null)
            {
                return(NotFound());
            }
            serializer = new OneRosterSerializer("course");
            course.AsJson(serializer.writer, BaseUrl());
            return(JsonOk(serializer.Finish()));
        }
        public IActionResult GetAcademicSession([FromRoute] string id)
        {
            using (var client = _client)
            {
                var response = client.GetAsync(BuildSingleRecordUrl <AcademicSession>(id));
                var decoded  = response.Result.Content.ReadAsStringAsync().Result;
                var result   = JsonConvert.DeserializeObject <CrmAcademicSession>(decoded);

                var session = new AcademicSession(result);

                serializer = new OneRosterSerializer("user");
                session.AsJson(serializer.writer, BaseUrl());
                return(JsonOk(serializer.Finish()));
            }
        }
        public IActionResult GetOrg([FromRoute] string id)
        {
            var org = db.Orgs
                      .Include(o => o.Parent)
                      .Include(o => o.Children)
                      .SingleOrDefault(a => a.Id == id);

            if (org == null)
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("org");
            org.AsJson(serializer.writer, BaseUrl());
            return(JsonOk(serializer.Finish()));
        }
예제 #22
0
        public IActionResult GetEnrollment([FromRoute] string id)
        {
            var enrollment = db.Enrollments
                             .Include(e => e.User)
                             .Include(e => e.IMSClass)
                             .Include(e => e.School)
                             .SingleOrDefault(a => a.Id == id);

            if (enrollment == null)
            {
                return(NotFound());
            }
            serializer = new OneRosterSerializer("enrollment");
            enrollment.AsJson(serializer.Writer, BaseUrl());
            return(JsonOk(serializer.Finish()));
        }
예제 #23
0
        public IActionResult GetResult([FromRoute] string id)
        {
            var result = db.Results
                         .Include(r => r.LineItem)
                         .Include(r => r.Student)
                         .SingleOrDefault(li => li.Id == id);

            if (result == null)
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("result");
            result.AsJson(serializer.Writer, BaseUrl());
            return(JsonOk(serializer.Finish()));
        }
예제 #24
0
        public IActionResult GetStudent([FromRoute] string id)
        {
            var student = db.Users
                          .Include(u => u.UserOrgs).ThenInclude(uo => uo.Org)
                          .Include(u => u.UserAgents).ThenInclude(ua => ua.Agent)
                          .SingleOrDefault(u => u.Id == id && u.Role == Vocabulary.RoleType.student);

            if (student == null)
            {
                return(NotFound());
            }

            serializer = new OneRosterSerializer("user");
            student.AsJson(serializer.Writer, BaseUrl());

            return(JsonOk(serializer.Finish()));
        }
예제 #25
0
        public IActionResult GetAllResources()
        {
            IQueryable <Resource> resourcesQuery = db.Resources;

            resourcesQuery = ApplyBinding(resourcesQuery);
            var resources = resourcesQuery.ToList();

            serializer = new OneRosterSerializer("resources");
            serializer.Writer.WriteStartArray();
            foreach (var resource in resources)
            {
                resource.AsJson(serializer.Writer, BaseUrl());
            }
            serializer.Writer.WriteEndArray();

            return(JsonOk(FinishSerialization(), ResponseCount));
        }
        public IActionResult GetAllDemographics()
        {
            IQueryable <Demographic> demographicsQuery = db.Demographics;

            demographicsQuery = ApplyBinding(demographicsQuery);
            var demographics = demographicsQuery.ToList();

            serializer = new OneRosterSerializer("demographics");
            serializer.writer.WriteStartArray();
            foreach (var demographic in demographics)
            {
                demographic.AsJson(serializer.writer, BaseUrl());
            }
            serializer.writer.WriteEndArray();

            return(JsonOk(FinishSerialization(), ResponseCount));
        }
예제 #27
0
        public IActionResult GetClass([FromRoute] string id)
        {
            var imsClasses = db.IMSClasses
                             .Include(k => k.IMSClassAcademicSessions)
                             .ThenInclude(kas => kas.AcademicSession)
                             .Include(k => k.Course)
                             .Include(k => k.School)
                             .SingleOrDefault(k => k.Id == id);

            if (imsClasses == null)
            {
                return(NotFound());
            }
            serializer = new OneRosterSerializer("class");
            imsClasses.AsJson(serializer.Writer, BaseUrl());
            return(JsonOk(serializer.Finish()));
        }
        public IActionResult GetAllGradingPeriods()
        {
            IQueryable <AcademicSession> sessionsQuery = db.AcademicSessions.Where(a => a.Type == Vocabulary.SessionType.gradingPeriod);

            sessionsQuery = ApplyBinding(sessionsQuery);
            var sessions = sessionsQuery.ToList();

            serializer = new OneRosterSerializer("academicSessions");
            serializer.Writer.WriteStartArray();
            foreach (var session in sessions)
            {
                session.AsJson(serializer.Writer, BaseUrl());
            }
            serializer.Writer.WriteEndArray();

            return(JsonOk(FinishSerialization(), ResponseCount));
        }
예제 #29
0
        public IActionResult GetAllTerms()
        {
            IQueryable <AcademicSession> termsQuery = db.AcademicSessions
                                                      .Where(ac => ac.Type == Vocabulary.SessionType.term);

            termsQuery = ApplyBinding(termsQuery);
            var terms = termsQuery.ToList();

            serializer = new OneRosterSerializer("terms");
            serializer.Writer.WriteStartArray();
            foreach (var tern in terms)
            {
                tern.AsJson(serializer.Writer, BaseUrl());
            }
            serializer.Writer.WriteEndArray();

            return(JsonOk(FinishSerialization(), ResponseCount));
        }
        public IActionResult GetAllCourses()
        {
            IQueryable <Course> courseQuery = db.Courses
                                              .Include(c => c.SchoolYearAcademicSession)
                                              .Include(c => c.Org);

            courseQuery = ApplyBinding(courseQuery);
            var courses = courseQuery.ToList();

            serializer = new OneRosterSerializer("courses");
            serializer.writer.WriteStartArray();
            foreach (var course in courses)
            {
                course.AsJson(serializer.writer, BaseUrl());
            }
            serializer.writer.WriteEndArray();

            return(JsonOk(FinishSerialization(), ResponseCount));
        }