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]
if (remote_evaluation_mapping = RemoteEvaluationMapping.find_by(validation_token:))
@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))
feedback = @submission.calculate_score(remote_evaluation_mapping.user)
{message: I18n.t('exercises.editor.run_success'), status: 201, feedback:}
@ -80,7 +81,7 @@ class RemoteEvaluationController < ApplicationController
files_attributes = remote_evaluation_params[:files_attributes]
submission_params = remote_evaluation_params.except(:validation_token)
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[:cause] = cause
submission_params[:files_attributes] =

View File

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

View File

@ -5,6 +5,7 @@ class RemoteEvaluationMapping < ApplicationRecord
include Creation
before_create :generate_token, unless: :validation_token?
belongs_to :exercise
belongs_to :programming_group, optional: true
belongs_to :study_group, optional: true
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.
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
enable_extension "pg_trgm"
enable_extension "pgcrypto"
@ -454,6 +454,8 @@ ActiveRecord::Schema[7.1].define(version: 2023_10_29_172331) do
t.datetime "updated_at"
t.string "user_type"
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"
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 "programming_group_memberships", "programming_groups"
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 "structured_error_attributes", "error_template_attributes"
add_foreign_key "structured_error_attributes", "structured_errors"