chore: init commit

in worker.../repo/GITFOLDER.zip is the .git folder.
This commit is contained in:
2026-08-11 14:44:09 -04:00
parent 0012380fd3
commit 392781f7aa
781 changed files with 65944 additions and 0 deletions

View File

@@ -0,0 +1,87 @@
# frozen_string_literal: true
class Student < User
has_many :classroom_enrollments, dependent: :destroy
has_many :classrooms, through: :classroom_enrollments
# Ensure students have nil email by default (not empty string)
after_initialize :set_default_email, if: :new_record?
after_create :ensure_portfolio
after_create :create_initial_enrollment, if: -> { classroom_id.present? }
delegate :path, to: :portfolio, prefix: true, allow_nil: true
# Get the student's current (active) enrollments
#
# @return [ActiveRecord::Relation<ClassroomEnrollment>]
def current_enrollments
classroom_enrollments.current
end
# Get the student's current (active) classrooms
#
# @return [ActiveRecord::Relation<Classroom>]
def current_classrooms
classrooms.joins(:classroom_enrollments)
.merge(classroom_enrollments.current)
.distinct
end
# Get the student's primary enrollment
#
# @return [ClassroomEnrollment, nil]
def primary_enrollment
classroom_enrollments.primary_enrollment.current.first
end
# Get the student's primary classroom (for backward compatibility)
# Falls back to classroom_id if no primary enrollment exists
#
# @return [Classroom, nil]
def primary_classroom
primary_enrollment&.classroom || classroom
end
# Enroll the student in a classroom
#
# @param classroom [Classroom] the classroom to enroll in
# @param enrolled_at [DateTime] when the student enrolled (defaults to now)
# @param primary [Boolean] whether this should be the primary enrollment
# @return [ClassroomEnrollment]
def enroll_in!(classroom, enrolled_at: Time.current, primary: false)
enrollment = classroom_enrollments.create!(
classroom: classroom,
enrolled_at: enrolled_at,
primary: false
)
enrollment.make_primary! if primary
enrollment
end
# Unenroll the student from a classroom
#
# @param classroom [Classroom] the classroom to unenroll from
# @param unenrolled_at [DateTime] when the student was unenrolled (defaults to now)
# @return [void]
def unenroll_from!(classroom, unenrolled_at: Time.current)
current_enrollments.for_classroom(classroom).each do |enrollment|
enrollment.unenroll!(at: unenrolled_at)
end
end
private
def set_default_email
self.email = nil if email.blank?
end
def ensure_portfolio
create_portfolio! if portfolio.blank?
end
def create_initial_enrollment
# Create initial enrollment based on classroom_id
# Set as primary since it's the first enrollment
enroll_in!(classroom, enrolled_at: created_at, primary: true)
end
end