Created
June 26, 2014 01:40
-
-
Save gogogarrett/9f1f2313a4771cede537 to your computer and use it in GitHub Desktop.
yay for services.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Api | |
module V1 | |
class AnswerController < ApplicationController | |
respond_to :json | |
def create | |
lesson_session.process_attempts(params[:attempts].values) | |
API::ProcessAnswer.new(lesson_session, current_student).call if lesson_session.completed? | |
render json: {} | |
end | |
private | |
def lesson_session | |
unless session = LessonSession.find_for(current_student, lesson_id) | |
session = LessonSession.create(current_student, lesson_id) | |
end | |
session | |
end | |
def lesson_id | |
params[:lesson_id] | |
end | |
end | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Api | |
module V1 | |
class AnswerController < ApplicationController | |
respond_to :json | |
def create | |
lesson_session.process_attempts(params[:attempts].values) | |
# [g] make a service | |
if lesson_session.completed? | |
score = Score::LessonSession.build(lesson_session).to_i | |
lessons_users = LessonsUser.find_by(student_id: current_student.id, lesson_id: lesson_id) | |
if lessons_users | |
count = lessons_users.count | |
if score > lessons_users.score | |
lessons_users.update(score: score, count: count + 1) | |
else | |
lessons_users.update(count: count + 1) | |
end | |
else | |
LessonsUser.create(student_id: current_student.id, lesson_id: lesson_id, score: score, count: 1) | |
end | |
end | |
render json: {} | |
end | |
private | |
def lesson_session | |
unless session = LessonSession.find_for(current_student, lesson_id) | |
session = LessonSession.create(current_student, lesson_id) | |
end | |
session | |
end | |
def lesson_id | |
params[:lesson_id] | |
end | |
end | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module API | |
class ProcessAnswer | |
def initialize(lesson_session, student) | |
@session, @student = lesson_session, student | |
end | |
def call | |
if lessons_user | |
update_score_and_count | |
else | |
LessonsUser.create(student_id: student.id, lesson_id: lesson_id, score: score, count: 1) | |
end | |
end | |
private | |
attr_reader :session, :student | |
def update_score_and_count | |
update_hash = { count: increment_count } | |
update_hash[:score] = score if higher_score? | |
lessons_user.update(update_hash) | |
end | |
def higher_score? | |
score > lessons_user.score | |
end | |
def increment_count | |
count + 1 | |
end | |
def score | |
Score::LessonSession.build(session).to_i | |
end | |
def lessons_user | |
@lessons_user ||= LessonsUser.find_by(student_id: student.id, lesson_id: lesson_id) | |
end | |
def count | |
lessons_user.count | |
end | |
def lesson_id | |
session.lesson.id | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment