feat: 多班级版 v2.0 - Go后端重写 + 43轮代码审查
- 后端从 Python FastAPI 重写为 Go Gin(端口 56789) - 多班级完全隔离 - 超级管理员独立登录 - 课代表作业管理、排行榜分项排行 - 角色加减分上下限可配置 - 家长改密功能(可开关) - 周度/月度重置功能 - MySQL 5.7 兼容 - 43轮代码审查+全部修复 - Apache 2.0 许可证
This commit is contained in:
92
backend-go/internal/service/subject_service.go
Normal file
92
backend-go/internal/service/subject_service.go
Normal file
@@ -0,0 +1,92 @@
|
||||
// ===========================================
|
||||
// 多班级版班级管理系统 - 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)
|
||||
}
|
||||
Reference in New Issue
Block a user