Skip to content

Phase 8 — SurveyReport Model #1156

Description

@lortza

app/models/survey_report.rb

 class SurveyReport
   def initialize(user:, survey:)
     @user = user
     @survey = survey
   end

   def total_scores_over_time
     responses.order(:occurred_at).map { |r| [r.occurred_at.to_date, r.total_score] }
   end

   def average_score_by_question
     SurveyAnswer
       .joins(:survey_response, :survey_question)
       .where(survey_responses: { user_id: @user.id, survey_id: @survey.id })
       .group("survey_questions.text")
       .average(:score)
   end

   def latest_response
     responses.order(occurred_at: :desc).first
   end

   def previous_response
     responses.order(occurred_at: :desc).offset(1).first
   end

   def score_delta
     return nil unless latest_response && previous_response
     latest_response.total_score - previous_response.total_score
   end

   private

   def responses
     @responses ||= @user.survey_responses.where(survey: @survey)
   end
 end

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions