Add CommunitySolution

* Also slightly refactor some JS files
This commit is contained in:
Sebastian Serth
2021-11-21 19:18:52 +01:00
parent d559cfb323
commit da4e10b990
21 changed files with 509 additions and 31 deletions

View File

@@ -0,0 +1,13 @@
# frozen_string_literal: true
class CommunitySolution < ApplicationRecord
belongs_to :exercise
has_many :community_solution_locks
has_many :community_solution_contributions
has_and_belongs_to_many :users, polymorphic: true, through: :community_solution_contributions
has_many :files, class_name: 'CodeOcean::File', through: :community_solution_contributions
def to_s
"Gemeinschaftslösung für #{exercise}"
end
end

View File

@@ -0,0 +1,14 @@
# frozen_string_literal: true
class CommunitySolutionContribution < ApplicationRecord
include Creation
include Context
belongs_to :community_solution
belongs_to :community_solution_lock
validates :proposed_changes, boolean_presence: true
validates :timely_contribution, boolean_presence: true
validates :autosave, boolean_presence: true
validates :working_time, presence: true
end

View File

@@ -0,0 +1,18 @@
# frozen_string_literal: true
class CommunitySolutionLock < ApplicationRecord
include Creation
belongs_to :community_solution
has_many :community_solution_contributions
validates :locked_until, presence: true
def active?
Time.zone.now <= locked_until
end
def working_time
ActiveSupport::Duration.build(locked_until - created_at)
end
end