// =========================================== // 多班级版班级管理系统 - Go 后端 // // 开发者: Canglan // 联系方式: admin@sea-studio.top // 版权归属: Sea Network Technology Studio // 许可证: Apache License 2.0 // // 版权所有 © Sea Network Technology Studio // =========================================== package repository import ( "gorm.io/gorm" "hz-gitea.sea-studio.top/canglan/SharedClassManager/internal/model" ) // SubjectRepo 科目数据访问层 type SubjectRepo struct { db *gorm.DB } // NewSubjectRepo 创建科目 Repository func NewSubjectRepo(db *gorm.DB) *SubjectRepo { return &SubjectRepo{db: db} } // GetAll 获取所有科目列表 func (r *SubjectRepo) GetAll(isActive *bool) ([]model.Subject, error) { var subjects []model.Subject query := r.db.Where("1 = 1") if isActive != nil { if *isActive { query = query.Where("is_active = 1") } else { query = query.Where("is_active = 0") } } if err := query.Order("sort_order, subject_id").Find(&subjects).Error; err != nil { return nil, err } return subjects, nil } // GetByID 根据ID获取科目 func (r *SubjectRepo) GetByID(subjectID int) (*model.Subject, error) { var subject model.Subject if err := r.db.Where("subject_id = ?", subjectID).First(&subject).Error; err != nil { return nil, err } return &subject, nil } // GetByName 根据科目名称获取科目 func (r *SubjectRepo) GetByName(subjectName string) (*model.Subject, error) { var subject model.Subject if err := r.db.Where("subject_name = ?", subjectName).First(&subject).Error; err != nil { return nil, err } return &subject, nil } // Create 创建科目 func (r *SubjectRepo) Create(subject *model.Subject) (int, error) { if err := r.db.Create(subject).Error; err != nil { return 0, err } return subject.SubjectID, nil } // Update 更新科目信息 func (r *SubjectRepo) Update(subjectID int, updates map[string]interface{}) error { if len(updates) == 0 { return nil } return r.db.Model(&model.Subject{}). Where("subject_id = ?", subjectID). Updates(updates).Error } // Delete 删除科目 func (r *SubjectRepo) Delete(subjectID int) error { return r.db.Where("subject_id = ?", subjectID).Delete(&model.Subject{}).Error } // HasRelatedData 检查科目是否有关联的作业数据 func (r *SubjectRepo) HasRelatedData(subjectID int) (bool, error) { var count int64 if err := r.db.Model(&model.Assignment{}). Where("subject_id = ?", subjectID). Count(&count).Error; err != nil { return false, err } return count > 0, nil } // Activate 激活科目 func (r *SubjectRepo) Activate(subjectID int) error { return r.db.Model(&model.Subject{}). Where("subject_id = ?", subjectID). Update("is_active", 1).Error }