Skip to content

Commit

Permalink
refactor(reference time): extract end_at from SQL
Browse files Browse the repository at this point in the history
for performance efficiency while getting statistics
  • Loading branch information
bivanalhar committed Apr 2, 2024
1 parent cbbda90 commit 0313c8d
Show file tree
Hide file tree
Showing 8 changed files with 19 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,4 @@ def reference_times_hash(assessment_id_array, course_id)
)
reference_times.map { |rt| [rt.assessment_id, rt.end_at] }.to_h
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def answer_statistics_hash
JOIN attempt_info
ON attempt_count.question_id = attempt_info.question_id AND attempt_count.submission_id = attempt_info.submission_id
SQL
)
)

submission_answer_statistics.group_by(&:submission_id).
transform_values do |grouped_answers|
Expand Down
15 changes: 1 addition & 14 deletions app/controllers/course/statistics/assessments_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ class Course::Statistics::AssessmentsController < Course::Statistics::Controller
def main_statistics
@assessment = Course::Assessment.where(id: assessment_params[:id]).
calculated(:maximum_grade, :question_count).
preload(lesson_plan_item: [:reference_times, personal_times: :course_user],
course: :course_users).first
preload(course: :course_users).first
submissions = Course::Assessment::Submission.where(assessment_id: assessment_params[:id]).
calculated(:grade, :grader_ids).
preload(creator: :course_users)
Expand Down Expand Up @@ -47,18 +46,6 @@ def load_course_user_students_info
@group_names_hash = group_names_hash
end

def fetch_all_ancestor_assessments
current_assessment = Course::Assessment.preload(:duplication_traceable).find(assessment_params[:id])
@ancestors = [current_assessment]
while current_assessment.duplication_traceable.present? &&
current_assessment.duplication_traceable.source_id.present?
current_assessment = current_assessment.duplication_traceable.source
break unless can?(:read_ancestor, current_assessment)

@ancestors.unshift(current_assessment)
end
end

def fetch_all_ancestor_assessments
current_assessment = Course::Assessment.preload(:duplication_traceable).find(assessment_params[:id])
@ancestors = [current_assessment]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# frozen_string_literal: true
json.assessment do
json.partial! 'assessment', assessment: @assessment, course: current_course
json.isAutograded @assessment_autograded
json.questionCount @assessment.question_count
end

json.submissions @student_submissions_hash.each do |course_user, (submission, answers, end_at)|
json.partial! 'course_user', course_user: course_user
json.partial! 'submission', submission: submission, end_at: end_at
json.partial! 'attempt_status', answers: answers

json.groups course_user.groups do |group|
json.name group.name
Expand All @@ -16,6 +16,7 @@ json.submissions @student_submissions_hash.each do |course_user, (submission, an
if !submission.nil? && submission.workflow_state == 'published' && submission.grader_ids
# the graders are all the same regardless of question, so we just pick the first one
json.partial! 'answer', grader: @course_users_hash[submission.grader_ids.first], answers: answers
json.partial! 'attempt_status', answers: answers
end
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import MainSubmissionChart from './SubmissionStatus/MainSubmissionChart';
import MainSubmissionTimeAndGradeStatistics from './SubmissionTimeAndGradeStatistics/MainSubmissionTimeAndGradeStatistics';
import DuplicationHistoryStatistics from './DuplicationHistoryStatistics';
import { getAssessmentStatistics } from './selectors';
import StudentAttemptCountTable from './StudentAttemptCountTable';
import StudentMarksPerQuestionTable from './StudentMarksPerQuestionTable';

const translations = defineMessages({
Expand Down Expand Up @@ -45,6 +46,10 @@ const translations = defineMessages({
id: 'course.assessment.statistics.marksPerQuestion',
defaultMessage: 'Marks Per Question',
},
attemptCount: {
id: 'course.assessment.statistics.attemptCount',
defaultMessage: 'Attempt Count',
},
gradeDistribution: {
id: 'course.assessment.statistics.gradeDistribution',
defaultMessage: 'Grade Distribution',
Expand All @@ -64,6 +69,7 @@ const tabMapping = (includePhantom: boolean): Record<string, JSX.Element> => {
marksPerQuestion: (
<StudentMarksPerQuestionTable includePhantom={includePhantom} />
),
attemptCount: <StudentAttemptCountTable includePhantom={includePhantom} />,
gradeDistribution: <MainGradesChart includePhantom={includePhantom} />,
submissionTimeAndGrade: (
<MainSubmissionTimeAndGradeStatistics includePhantom={includePhantom} />
Expand Down Expand Up @@ -124,6 +130,12 @@ const AssessmentStatisticsPage: FC = () => {
label={t(translations.marksPerQuestion)}
value="marksPerQuestion"
/>
<Tab
className="min-h-12"
id="attemptCount"
label={t(translations.attemptCount)}
value="attemptCount"
/>
<Tab
className="min-h-12"
id="gradeDistribution"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ const StudentAttemptCountTable: FC<Props> = (props) => {
);

const jointGroupsName = (datum: MainSubmissionInfo): string =>
datum.groups ? datum.groups.join(', ') : '';
datum.groups ? datum.groups.map((g) => g.name).join(', ') : '';

const columns: ColumnTemplate<MainSubmissionInfo>[] = [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ const StudentMarksPerQuestionTable: FC<Props> = (props) => {
);

const jointGroupsName = (datum: MainSubmissionInfo): string =>
datum.groups ? datum.groups.join(', ') : '';
datum.groups ? datum.groups.map((g) => g.name).join(', ') : '';

const columns: ColumnTemplate<MainSubmissionInfo>[] = [
{
Expand Down
1 change: 0 additions & 1 deletion client/app/types/course/statistics/assessmentStatistics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ interface AssessmentInfo {
startAt: string | null;
endAt: string | null;
maximumGrade: number;
questionCount?: number;
url: string;
}

Expand Down

0 comments on commit 0313c8d

Please sign in to comment.