예제 #1
0
        public async Task <ExitCode> CourseProgress(string courseId)
        {
            var course = await _coursesApi.Course(courseId);

            var courseUnits = course.Units
                              .Where(u => !u.IsSection)
                              .ToList();
            var courseLearners = course.Users
                                 .Where(u => u.IsLearner)
                                 .ToList();

            Empty <IEnumerable <string> >()
            .Concat(new[] { "name" }.Concat(Enumerable.Select(courseUnits, u => u.Name)))
            .Concat(GetProgressByUser())
            .Transpose()
            .Then(progress =>
            {
                _output.Write(
                    header: progress.First(),
                    rows: progress.Skip(1));
            });
            return(ExitCode.Success);

            IEnumerable <IEnumerable <string> > GetProgressByUser()
            {
                return(courseLearners
                       .Select(LearnerStatus)
                       .Select(_ => _.Result));
            }

            async Task <IEnumerable <string> > LearnerStatus(Course.User learner)
            {
                var status = await _coursesApi.UserStatus(learner.Id, course.Id);

                return(new[] { learner.Name }
                       .Concat(courseUnits.Select(u => StatusForUnit(u, status))));
            }