技术栈:Go (Gin + GORM) + PHP + MySQL 5.7 + Redis 主要功能: - 多班级完全隔离(class_id 贯穿全系统) - 后端从 Python FastAPI 重写为 Go Gin(端口 56789) - 超级管理员独立登录(env 配置路径,默认账密 admin/Admin123) - 科任老师/课代表新角色 - 课代表作业管理页面 - 排行榜分项排行(操行分/考勤/作业) - 角色加减分上下限由班主任配置 - 家长改密功能(可开关) - 班级角色按需开关 - 宿舍号格式:南0-000 - 周度/月度重置功能 - MySQL 5.7 兼容 - Nginx 反向代理部署 开发者: Canglan 版权归属: Sea Network Technology Studio 许可证: Apache License 2.0
153 lines
3.6 KiB
Go
153 lines
3.6 KiB
Go
// ===========================================
|
|
// 多班级版班级管理系统 - Go 后端
|
|
//
|
|
// 开发者: Canglan
|
|
// 联系方式: admin@sea-studio.top
|
|
// 版权归属: Sea Network Technology Studio
|
|
// 许可证: Apache License 2.0
|
|
//
|
|
// 版权所有 © Sea Network Technology Studio
|
|
// ===========================================
|
|
|
|
package handler
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"hz-gitea.sea-studio.top/canglan/SharedClassManager/internal/schema"
|
|
"hz-gitea.sea-studio.top/canglan/SharedClassManager/internal/service"
|
|
"hz-gitea.sea-studio.top/canglan/SharedClassManager/pkg/response"
|
|
)
|
|
|
|
// SubjectHandler 科目管理处理器
|
|
type SubjectHandler struct {
|
|
subjectService *service.SubjectService
|
|
}
|
|
|
|
// NewSubjectHandler 创建科目管理处理器
|
|
func NewSubjectHandler(subjectService *service.SubjectService) *SubjectHandler {
|
|
return &SubjectHandler{subjectService: subjectService}
|
|
}
|
|
|
|
// SubjectList 科目列表
|
|
func (h *SubjectHandler) SubjectList(c *gin.Context) {
|
|
var isActive *bool
|
|
if v := c.Query("is_active"); v == "true" {
|
|
b := true
|
|
isActive = &b
|
|
} else if v == "false" {
|
|
b := false
|
|
isActive = &b
|
|
}
|
|
|
|
result, err := h.subjectService.GetSubjects(isActive)
|
|
if err != nil {
|
|
response.InternalError(c, "获取科目列表失败")
|
|
return
|
|
}
|
|
response.Success(c, result, "操作成功")
|
|
}
|
|
|
|
// SubjectCreate 创建科目
|
|
func (h *SubjectHandler) SubjectCreate(c *gin.Context) {
|
|
var req schema.SubjectCreateRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.BadRequest(c, "参数错误")
|
|
return
|
|
}
|
|
|
|
result, err := h.subjectService.CreateSubject(req.SubjectName, req.SubjectCode, req.SortOrder)
|
|
if err != nil {
|
|
response.InternalError(c, err.Error())
|
|
return
|
|
}
|
|
|
|
if success, _ := result["success"].(bool); !success {
|
|
response.BadRequest(c, result["message"].(string))
|
|
return
|
|
}
|
|
response.Success(c, result, "操作成功")
|
|
}
|
|
|
|
// SubjectUpdate 更新科目
|
|
func (h *SubjectHandler) SubjectUpdate(c *gin.Context) {
|
|
subjectID, ok := parseID(c, "subject_id")
|
|
if !ok {
|
|
return
|
|
}
|
|
|
|
var req schema.SubjectUpdateRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.BadRequest(c, "参数错误")
|
|
return
|
|
}
|
|
|
|
updates := make(map[string]interface{})
|
|
if req.SubjectName != nil {
|
|
updates["subject_name"] = *req.SubjectName
|
|
}
|
|
if req.SubjectCode != nil {
|
|
updates["subject_code"] = *req.SubjectCode
|
|
}
|
|
if req.IsActive != nil {
|
|
updates["is_active"] = *req.IsActive
|
|
}
|
|
if req.SortOrder != nil {
|
|
updates["sort_order"] = *req.SortOrder
|
|
}
|
|
|
|
if err := h.subjectService.UpdateSubject(subjectID, updates); err != nil {
|
|
response.InternalError(c, err.Error())
|
|
return
|
|
}
|
|
response.SuccessWithMessage(c, "更新成功")
|
|
}
|
|
|
|
// SubjectDelete 删除科目
|
|
func (h *SubjectHandler) SubjectDelete(c *gin.Context) {
|
|
subjectID, ok := parseID(c, "subject_id")
|
|
if !ok {
|
|
return
|
|
}
|
|
|
|
if err := h.subjectService.DeleteSubject(subjectID); err != nil {
|
|
response.InternalError(c, err.Error())
|
|
return
|
|
}
|
|
response.SuccessWithMessage(c, "删除成功")
|
|
}
|
|
|
|
// SubjectToggle 切换科目启用/禁用状态
|
|
func (h *SubjectHandler) SubjectToggle(c *gin.Context) {
|
|
subjectID, ok := parseID(c, "subject_id")
|
|
if !ok {
|
|
return
|
|
}
|
|
|
|
var req struct {
|
|
IsActive bool `json:"is_active"`
|
|
}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.BadRequest(c, "参数错误")
|
|
return
|
|
}
|
|
|
|
var err error
|
|
if req.IsActive {
|
|
err = h.subjectService.EnableSubject(subjectID)
|
|
} else {
|
|
err = h.subjectService.DisableSubject(subjectID)
|
|
}
|
|
|
|
if err != nil {
|
|
response.InternalError(c, err.Error())
|
|
return
|
|
}
|
|
|
|
if req.IsActive {
|
|
response.SuccessWithMessage(c, "科目已启用")
|
|
} else {
|
|
response.SuccessWithMessage(c, "科目已禁用")
|
|
}
|
|
}
|