- 后端从 Python FastAPI 重写为 Go Gin(端口 56789) - 多班级完全隔离 - 超级管理员独立登录 - 课代表作业管理、排行榜分项排行 - 角色加减分上下限可配置 - 家长改密功能(可开关) - 周度/月度重置功能 - MySQL 5.7 兼容 - 43轮代码审查+全部修复 - Apache 2.0 许可证
93 lines
2.7 KiB
Go
93 lines
2.7 KiB
Go
// ===========================================
|
||
// 多班级版班级管理系统 - 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)
|
||
}
|