Files
codeocean/app/controllers/flowr_controller.rb
kiragrammel 319c3ab3b4 Add ProgrammingGroup & ProgrammingGroupMembership
* User can create programming group with other users for exercise
* Submission is shared in a group
* Also adjust specs
2023-08-24 19:32:06 +02:00

43 lines
1.6 KiB
Ruby

# frozen_string_literal: true
class FlowrController < ApplicationController
def insights
require_user!
# get the latest submission for this user that also has a test run (i.e. structured_errors if applicable)
submission = Submission.joins(:testruns)
.where(submissions: {contributor: current_contributor})
.includes(structured_errors: [structured_error_attributes: [:error_template_attribute]])
.merge(Testrun.order(created_at: :desc)).first
# Return if no submission was found
if submission.blank? || @embed_options[:disable_hints] || @embed_options[:hide_test_results]
skip_authorization
render json: [], status: :ok
return
end
# verify authorization for the submission, as all queried errors are generated by this submission anyway
# and structured_errors don't have a policy yet
authorize(submission)
# for each error get all attributes, filter out uninteresting ones, and build a query
insights = submission.structured_errors.map do |error|
attributes = error.structured_error_attributes.select do |attribute|
interesting?(attribute) and attribute.match
end
# once the programming language model becomes available, the language name can be added to the query to
# produce more relevant results
query = attributes.map(&:value).join(' ')
{submission:, error:, attributes:, query:}
end
# Always return JSON
render json: insights, status: :ok
end
def interesting?(attribute)
!attribute.error_template_attribute.key.index(/error message|error type/i).nil?
end
private :interesting?
end