init
This commit is contained in:
100
internal/handler/exam_handler.go
Normal file
100
internal/handler/exam_handler.go
Normal file
@@ -0,0 +1,100 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"exam_registration/internal/model"
|
||||
"exam_registration/internal/service"
|
||||
"exam_registration/pkg/response"
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type ExamHandler struct {
|
||||
examService *service.ExamService
|
||||
}
|
||||
|
||||
func NewExamHandler() *ExamHandler {
|
||||
return &ExamHandler{
|
||||
examService: &service.ExamService{},
|
||||
}
|
||||
}
|
||||
|
||||
// CreateExam 创建考试
|
||||
func (h *ExamHandler) CreateExam(c *gin.Context) {
|
||||
var exam model.Exam
|
||||
if err := c.ShouldBindJSON(&exam); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
userID, _ := c.Get("user_id")
|
||||
exam.CreatorID = userID.(uint64)
|
||||
|
||||
if err := h.examService.CreateExam(&exam); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, exam)
|
||||
}
|
||||
|
||||
// GetExamByID 获取考试详情
|
||||
func (h *ExamHandler) GetExamByID(c *gin.Context) {
|
||||
id, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
|
||||
exam, err := h.examService.GetExamByID(id)
|
||||
if err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, exam)
|
||||
}
|
||||
|
||||
// GetExamList 获取考试列表
|
||||
func (h *ExamHandler) GetExamList(c *gin.Context) {
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
|
||||
|
||||
exams, total, err := h.examService.GetExamList(page, pageSize)
|
||||
if err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, gin.H{
|
||||
"list": exams,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"pageSize": pageSize,
|
||||
})
|
||||
}
|
||||
|
||||
// UpdateExam 更新考试
|
||||
func (h *ExamHandler) UpdateExam(c *gin.Context) {
|
||||
id, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
|
||||
var updates map[string]interface{}
|
||||
if err := c.ShouldBindJSON(&updates); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.examService.UpdateExam(id, updates); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// DeleteExam 删除考试
|
||||
func (h *ExamHandler) DeleteExam(c *gin.Context) {
|
||||
id, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
|
||||
if err := h.examService.DeleteExam(id); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
106
internal/handler/notice_handler.go
Normal file
106
internal/handler/notice_handler.go
Normal file
@@ -0,0 +1,106 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"exam_registration/internal/model"
|
||||
"exam_registration/internal/service"
|
||||
"exam_registration/pkg/response"
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type NoticeHandler struct {
|
||||
noticeService *service.NoticeService
|
||||
}
|
||||
|
||||
func NewNoticeHandler() *NoticeHandler {
|
||||
return &NoticeHandler{
|
||||
noticeService: &service.NoticeService{},
|
||||
}
|
||||
}
|
||||
|
||||
// CreateNotice 创建通知
|
||||
func (h *NoticeHandler) CreateNotice(c *gin.Context) {
|
||||
var notice model.ExamNotice
|
||||
if err := c.ShouldBindJSON(¬ice); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
userID, _ := c.Get("user_id")
|
||||
notice.PublisherID = userID.(uint64)
|
||||
|
||||
if err := h.noticeService.CreateNotice(¬ice); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, notice)
|
||||
}
|
||||
|
||||
// GetNoticeByID 获取通知详情
|
||||
func (h *NoticeHandler) GetNoticeByID(c *gin.Context) {
|
||||
id, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
|
||||
notice, err := h.noticeService.GetNoticeByID(id)
|
||||
if err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, notice)
|
||||
}
|
||||
|
||||
// GetNoticeList 获取通知列表
|
||||
func (h *NoticeHandler) GetNoticeList(c *gin.Context) {
|
||||
examIDStr := c.Query("exam_id")
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
|
||||
|
||||
var examID int
|
||||
if examIDStr != "" {
|
||||
examID, _ = strconv.Atoi(examIDStr)
|
||||
}
|
||||
|
||||
notices, total, err := h.noticeService.GetNoticeList(examID, page, pageSize)
|
||||
if err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, gin.H{
|
||||
"list": notices,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"pageSize": pageSize,
|
||||
})
|
||||
}
|
||||
|
||||
// UpdateNotice 更新通知
|
||||
func (h *NoticeHandler) UpdateNotice(c *gin.Context) {
|
||||
id, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
|
||||
var updates map[string]interface{}
|
||||
if err := c.ShouldBindJSON(&updates); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.noticeService.UpdateNotice(id, updates); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// DeleteNotice 删除通知
|
||||
func (h *NoticeHandler) DeleteNotice(c *gin.Context) {
|
||||
id, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
|
||||
if err := h.noticeService.DeleteNotice(id); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
119
internal/handler/registration_handler.go
Normal file
119
internal/handler/registration_handler.go
Normal file
@@ -0,0 +1,119 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"exam_registration/internal/service"
|
||||
"exam_registration/pkg/response"
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type RegistrationHandler struct {
|
||||
registrationService *service.RegistrationService
|
||||
}
|
||||
|
||||
func NewRegistrationHandler() *RegistrationHandler {
|
||||
return &RegistrationHandler{
|
||||
registrationService: &service.RegistrationService{},
|
||||
}
|
||||
}
|
||||
|
||||
// CreateRegistration 创建报名
|
||||
func (h *RegistrationHandler) CreateRegistration(c *gin.Context) {
|
||||
userID, _ := c.Get("user_id")
|
||||
|
||||
var req struct {
|
||||
ExamID uint64 `json:"exam_id" binding:"required"`
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.registrationService.CreateRegistration(userID.(uint64), req.ExamID, req.Remark); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// GetRegistrationList 获取报名列表
|
||||
func (h *RegistrationHandler) GetRegistrationList(c *gin.Context) {
|
||||
userIDStr := c.Query("user_id")
|
||||
examIDStr := c.Query("exam_id")
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
|
||||
|
||||
var userID, examID int
|
||||
if userIDStr != "" {
|
||||
userID, _ = strconv.Atoi(userIDStr)
|
||||
}
|
||||
if examIDStr != "" {
|
||||
examID, _ = strconv.Atoi(examIDStr)
|
||||
}
|
||||
|
||||
registrations, total, err := h.registrationService.GetRegistrationList(userID, examID, page, pageSize)
|
||||
if err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, gin.H{
|
||||
"list": registrations,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"pageSize": pageSize,
|
||||
})
|
||||
}
|
||||
|
||||
// AuditRegistration 审核报名
|
||||
func (h *RegistrationHandler) AuditRegistration(c *gin.Context) {
|
||||
regID, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
|
||||
var req struct {
|
||||
Status int `json:"status" binding:"required"` // 1:通过,2:拒绝
|
||||
Comment string `json:"comment"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.registrationService.AuditRegistration(regID, req.Status, req.Comment); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// UpdateRegistration 更新报名信息
|
||||
func (h *RegistrationHandler) UpdateRegistration(c *gin.Context) {
|
||||
regID, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
|
||||
var updates map[string]interface{}
|
||||
if err := c.ShouldBindJSON(&updates); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.registrationService.UpdateRegistration(regID, updates); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// DeleteRegistration 取消报名
|
||||
func (h *RegistrationHandler) DeleteRegistration(c *gin.Context) {
|
||||
regID, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
|
||||
if err := h.registrationService.DeleteRegistration(regID); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
114
internal/handler/score_handler.go
Normal file
114
internal/handler/score_handler.go
Normal file
@@ -0,0 +1,114 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"exam_registration/internal/model"
|
||||
"exam_registration/internal/service"
|
||||
"exam_registration/pkg/response"
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type ScoreHandler struct {
|
||||
scoreService *service.ScoreService
|
||||
}
|
||||
|
||||
func NewScoreHandler() *ScoreHandler {
|
||||
return &ScoreHandler{
|
||||
scoreService: &service.ScoreService{},
|
||||
}
|
||||
}
|
||||
|
||||
// CreateScore 录入成绩
|
||||
func (h *ScoreHandler) CreateScore(c *gin.Context) {
|
||||
var score model.ExamScore
|
||||
if err := c.ShouldBindJSON(&score); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.scoreService.CreateScore(&score); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, score)
|
||||
}
|
||||
|
||||
// BatchCreateScores 批量录入成绩
|
||||
func (h *ScoreHandler) BatchCreateScores(c *gin.Context) {
|
||||
var scores []model.ExamScore
|
||||
if err := c.ShouldBindJSON(&scores); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.scoreService.BatchCreateScores(scores); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// GetScoreByUserAndExam 查询个人成绩
|
||||
func (h *ScoreHandler) GetScoreByUserAndExam(c *gin.Context) {
|
||||
userID, _ := c.Get("user_id")
|
||||
examID, _ := strconv.ParseUint(c.Param("exam_id"), 10, 64)
|
||||
|
||||
score, err := h.scoreService.GetScoreByUserAndExam(userID.(uint64), examID)
|
||||
if err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, score)
|
||||
}
|
||||
|
||||
// GetScoreList 获取成绩列表(管理员)
|
||||
func (h *ScoreHandler) GetScoreList(c *gin.Context) {
|
||||
examIDStr := c.Query("exam_id")
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
|
||||
|
||||
var examID int
|
||||
if examIDStr != "" {
|
||||
examID, _ = strconv.Atoi(examIDStr)
|
||||
}
|
||||
|
||||
scores, total, err := h.scoreService.GetScoreList(examID, page, pageSize)
|
||||
if err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, gin.H{
|
||||
"list": scores,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"pageSize": pageSize,
|
||||
})
|
||||
}
|
||||
|
||||
// PublishScore 发布成绩
|
||||
func (h *ScoreHandler) PublishScore(c *gin.Context) {
|
||||
id, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
|
||||
if err := h.scoreService.PublishScore(id); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// DeleteScore 删除成绩
|
||||
func (h *ScoreHandler) DeleteScore(c *gin.Context) {
|
||||
id, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
|
||||
if err := h.scoreService.DeleteScore(id); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
87
internal/handler/user_handler.go
Normal file
87
internal/handler/user_handler.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"exam_registration/internal/middleware"
|
||||
"exam_registration/internal/service"
|
||||
"exam_registration/pkg/response"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type UserHandler struct {
|
||||
userService *service.UserService
|
||||
}
|
||||
|
||||
func NewUserHandler() *UserHandler {
|
||||
return &UserHandler{
|
||||
userService: &service.UserService{},
|
||||
}
|
||||
}
|
||||
|
||||
// Login 用户登录
|
||||
func (h *UserHandler) Login(c *gin.Context) {
|
||||
var req service.LoginRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
token, err := h.userService.Login(&req)
|
||||
if err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, gin.H{"token": token})
|
||||
}
|
||||
|
||||
// Register 用户注册
|
||||
func (h *UserHandler) Register(c *gin.Context) {
|
||||
var req service.RegisterRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.userService.Register(&req); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
|
||||
// GetUserInfo 获取当前用户信息
|
||||
func (h *UserHandler) GetUserInfo(c *gin.Context) {
|
||||
userID, _ := c.Get("user_id")
|
||||
|
||||
user, err := h.userService.GetUserByID(userID.(uint64))
|
||||
if err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, user)
|
||||
}
|
||||
|
||||
// UpdateUserInfo 更新用户信息
|
||||
func (h *UserHandler) UpdateUserInfo(c *gin.Context) {
|
||||
userID, _ := c.Get("user_id")
|
||||
|
||||
var updates map[string]interface{}
|
||||
if err := c.ShouldBindJSON(&updates); err != nil {
|
||||
response.Error(c, response.BAD_REQUEST, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
// 不允许修改敏感字段
|
||||
delete(updates, "password")
|
||||
delete(updates, "role")
|
||||
delete(updates, "status")
|
||||
|
||||
if err := h.userService.UpdateUser(userID.(uint64), updates); err != nil {
|
||||
response.Error(c, response.ERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
response.Success(c, nil)
|
||||
}
|
||||
Reference in New Issue
Block a user