Allow programming groups to score exercises remotely

This commit is contained in:
Sebastian Serth
2023-11-01 23:56:56 +01:00
committed by Sebastian Serth
parent fe26378387
commit 3b05a44b9e
5 changed files with 19 additions and 7 deletions

View File

@ -54,6 +54,7 @@ class RemoteEvaluationController < ApplicationController
validation_token = remote_evaluation_params[:validation_token] validation_token = remote_evaluation_params[:validation_token]
if (remote_evaluation_mapping = RemoteEvaluationMapping.find_by(validation_token:)) if (remote_evaluation_mapping = RemoteEvaluationMapping.find_by(validation_token:))
@current_user = remote_evaluation_mapping.user @current_user = remote_evaluation_mapping.user
@current_contributor = remote_evaluation_mapping.programming_group || remote_evaluation_mapping.user
@submission = Submission.create(build_submission_params(cause, remote_evaluation_mapping)) @submission = Submission.create(build_submission_params(cause, remote_evaluation_mapping))
feedback = @submission.calculate_score(remote_evaluation_mapping.user) feedback = @submission.calculate_score(remote_evaluation_mapping.user)
{message: I18n.t('exercises.editor.run_success'), status: 201, feedback:} {message: I18n.t('exercises.editor.run_success'), status: 201, feedback:}
@ -80,7 +81,7 @@ class RemoteEvaluationController < ApplicationController
files_attributes = remote_evaluation_params[:files_attributes] files_attributes = remote_evaluation_params[:files_attributes]
submission_params = remote_evaluation_params.except(:validation_token) submission_params = remote_evaluation_params.except(:validation_token)
submission_params[:exercise] = remote_evaluation_mapping.exercise submission_params[:exercise] = remote_evaluation_mapping.exercise
submission_params[:user] = remote_evaluation_mapping.user submission_params[:contributor] = current_contributor
submission_params[:study_group_id] = remote_evaluation_mapping.study_group_id submission_params[:study_group_id] = remote_evaluation_mapping.study_group_id
submission_params[:cause] = cause submission_params[:cause] = cause
submission_params[:files_attributes] = submission_params[:files_attributes] =

View File

@ -358,17 +358,17 @@ class SubmissionsController < ApplicationController
end end
def create_remote_evaluation_mapping def create_remote_evaluation_mapping
user = @submission.user programming_group = current_contributor if current_contributor.programming_group?
exercise_id = @submission.exercise_id
remote_evaluation_mapping = RemoteEvaluationMapping.create( remote_evaluation_mapping = RemoteEvaluationMapping.create(
user:, user: current_user,
exercise_id:, programming_group:,
exercise: @submission.exercise,
study_group_id: session[:study_group_id] study_group_id: session[:study_group_id]
) )
# create .co file # create .co file
path = "tmp/#{user.id}.co" path = "tmp/#{current_user.id}.co"
# parse validation token # parse validation token
content = "#{remote_evaluation_mapping.validation_token}\n" content = "#{remote_evaluation_mapping.validation_token}\n"
# parse remote request url # parse remote request url

View File

@ -5,6 +5,7 @@ class RemoteEvaluationMapping < ApplicationRecord
include Creation include Creation
before_create :generate_token, unless: :validation_token? before_create :generate_token, unless: :validation_token?
belongs_to :exercise belongs_to :exercise
belongs_to :programming_group, optional: true
belongs_to :study_group, optional: true belongs_to :study_group, optional: true
def generate_token def generate_token

View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
class AddProgrammingGroupToRemoteEvalutionMapping < ActiveRecord::Migration[7.1]
def change
add_reference :remote_evaluation_mappings, :programming_group, index: true, null: true, foreign_key: true
end
end

View File

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.1].define(version: 2023_10_29_172331) do ActiveRecord::Schema[7.1].define(version: 2023_11_01_222855) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "pg_trgm" enable_extension "pg_trgm"
enable_extension "pgcrypto" enable_extension "pgcrypto"
@ -454,6 +454,8 @@ ActiveRecord::Schema[7.1].define(version: 2023_10_29_172331) do
t.datetime "updated_at" t.datetime "updated_at"
t.string "user_type" t.string "user_type"
t.bigint "study_group_id" t.bigint "study_group_id"
t.bigint "programming_group_id"
t.index ["programming_group_id"], name: "index_remote_evaluation_mappings_on_programming_group_id"
t.index ["study_group_id"], name: "index_remote_evaluation_mappings_on_study_group_id" t.index ["study_group_id"], name: "index_remote_evaluation_mappings_on_study_group_id"
end end
@ -686,6 +688,7 @@ ActiveRecord::Schema[7.1].define(version: 2023_10_29_172331) do
add_foreign_key "pair_programming_waiting_users", "programming_groups" add_foreign_key "pair_programming_waiting_users", "programming_groups"
add_foreign_key "programming_group_memberships", "programming_groups" add_foreign_key "programming_group_memberships", "programming_groups"
add_foreign_key "programming_groups", "exercises" add_foreign_key "programming_groups", "exercises"
add_foreign_key "remote_evaluation_mappings", "programming_groups"
add_foreign_key "remote_evaluation_mappings", "study_groups" add_foreign_key "remote_evaluation_mappings", "study_groups"
add_foreign_key "structured_error_attributes", "error_template_attributes" add_foreign_key "structured_error_attributes", "error_template_attributes"
add_foreign_key "structured_error_attributes", "structured_errors" add_foreign_key "structured_error_attributes", "structured_errors"