// =========================================== // 多班级版班级管理系统 - Go 后端 // // 开发者: Canglan // 联系方式: admin@sea-studio.top // 版权归属: Sea Network Technology Studio // 许可证: Apache License 2.0 // // 版权所有 © Sea Network Technology Studio // =========================================== package service import ( "fmt" "hz-gitea.sea-studio.top/canglan/SharedClassManager/internal/model" "hz-gitea.sea-studio.top/canglan/SharedClassManager/internal/repository" "hz-gitea.sea-studio.top/canglan/SharedClassManager/pkg/logger" ) // SubjectService 科目服务 type SubjectService struct { subjectRepo *repository.SubjectRepo } // NewSubjectService 创建科目服务 func NewSubjectService(subjectRepo *repository.SubjectRepo) *SubjectService { return &SubjectService{subjectRepo: subjectRepo} } // GetSubjects 获取科目列表 func (s *SubjectService) GetSubjects(isActive *bool) (map[string]interface{}, error) { subjects, err := s.subjectRepo.GetAll(isActive) if err != nil { return nil, err } return map[string]interface{}{ "subjects": subjects, "total": len(subjects), }, nil } // CreateSubject 创建科目 func (s *SubjectService) CreateSubject(subjectName string, subjectCode *string, sortOrder int) (map[string]interface{}, error) { existing, _ := s.subjectRepo.GetByName(subjectName) if existing != nil { return map[string]interface{}{"success": false, "message": "科目名称已存在"}, nil } subject := &model.Subject{ SubjectName: subjectName, SubjectCode: subjectCode, SortOrder: sortOrder, IsActive: 1, } subjectID, err := s.subjectRepo.Create(subject) if err != nil { return nil, err } logger.Sugared.Infof("创建科目: %s", subjectName) return map[string]interface{}{ "success": true, "subject_id": subjectID, }, nil } // UpdateSubject 更新科目 func (s *SubjectService) UpdateSubject(subjectID int, updates map[string]interface{}) error { return s.subjectRepo.Update(subjectID, updates) } // DisableSubject 禁用科目(将 is_active 设为 0,保留数据) func (s *SubjectService) DisableSubject(subjectID int) error { return s.subjectRepo.Update(subjectID, map[string]interface{}{"is_active": 0}) } // EnableSubject 启用科目(将 is_active 设为 1) func (s *SubjectService) EnableSubject(subjectID int) error { return s.subjectRepo.Update(subjectID, map[string]interface{}{"is_active": 1}) } // DeleteSubject 物理删除科目(需先检查关联数据) func (s *SubjectService) DeleteSubject(subjectID int) error { hasData, _ := s.subjectRepo.HasRelatedData(subjectID) if hasData { return fmt.Errorf("该科目下已有作业数据,无法删除") } return s.subjectRepo.Delete(subjectID) }