
Noticed a flaw when fetching the last submission, which is caused by timezone differences. First step to solve this. Existing Request for Comments still need to be updated with their current submissionId, the SQL to do that is not yet finished.
70 lines
2.2 KiB
Ruby
70 lines
2.2 KiB
Ruby
class RequestForComment < ActiveRecord::Base
|
|
include Creation
|
|
belongs_to :exercise
|
|
belongs_to :file, class_name: 'CodeOcean::File'
|
|
|
|
before_create :set_requested_timestamp
|
|
|
|
def self.last_per_user(n = 5)
|
|
from("(#{row_number_user_sql}) as request_for_comments").where("row_number <= ?", n)
|
|
end
|
|
|
|
def set_requested_timestamp
|
|
self.requested_at = Time.now
|
|
end
|
|
|
|
def submission
|
|
Submission.find(file.context_id)
|
|
end
|
|
|
|
def last_submission
|
|
Submission.find_by_sql(" select * from submissions
|
|
where exercise_id = #{exercise_id} AND
|
|
user_id = #{user_id}
|
|
order by created_at desc
|
|
limit 1").first
|
|
end
|
|
|
|
def last_submission_before_creation
|
|
submission1 = Submission.find_by_sql(" select * from submissions
|
|
where exercise_id = #{exercise_id} AND
|
|
user_id = #{user_id} AND
|
|
'#{created_at.localtime}' > created_at
|
|
order by created_at desc
|
|
limit 1").first
|
|
submission2 = Submission.find_by_sql(" select * from submissions
|
|
where exercise_id = #{exercise_id} AND
|
|
user_id = #{user_id} AND
|
|
'#{created_at}' > created_at
|
|
order by created_at desc
|
|
limit 1").first
|
|
submission3 = Submission.find_by_sql(" select * from submissions
|
|
where exercise_id = #{exercise_id} AND
|
|
user_id = #{user_id} AND
|
|
'#{created_at.strftime('%Y-%m-%d %H:%M:%S.%N')}' > created_at
|
|
order by created_at desc
|
|
limit 1").first
|
|
submission4 = Submission.find_by_sql(" select * from submissions
|
|
where exercise_id = #{exercise_id} AND
|
|
user_id = #{user_id} AND
|
|
'#{created_at.localtime.strftime('%Y-%m-%d %H:%M:%S.%N')}' > created_at
|
|
order by created_at desc
|
|
limit 1").first
|
|
binding.pry
|
|
submission1
|
|
end
|
|
|
|
def comments_count
|
|
submission.files.map { |file| file.comments.size}.sum
|
|
end
|
|
|
|
def to_s
|
|
"RFC-" + self.id.to_s
|
|
end
|
|
|
|
private
|
|
def self.row_number_user_sql
|
|
select("id, user_id, exercise_id, file_id, question, requested_at, created_at, updated_at, user_type, solved, row_number() OVER (PARTITION BY user_id ORDER BY created_at DESC) as row_number").to_sql
|
|
end
|
|
end
|