This commit is contained in:
@@ -811,6 +811,43 @@ func RandomAssignExamPapersHandler(db *gorm.DB) fiber.Handler {
|
||||
}
|
||||
}
|
||||
|
||||
// POST /api/exam-rooms/:id/assign-papers-batch — chia đề theo sơ đồ chỗ ngồi (frontend tính toán)
|
||||
func AssignExamPapersBatchHandler(db *gorm.DB) fiber.Handler {
|
||||
return func(c *fiber.Ctx) error {
|
||||
roomID, err := parseUintParam(c, "id")
|
||||
if err != nil {
|
||||
return c.Status(400).JSON(fiber.Map{"error": "Invalid id"})
|
||||
}
|
||||
var room models.ExamRoom
|
||||
if err := db.First(&room, roomID).Error; err != nil {
|
||||
return c.Status(404).JSON(fiber.Map{"error": "Không tìm thấy phòng"})
|
||||
}
|
||||
if !canModifyExamPapers(db, room) {
|
||||
return c.Status(403).JSON(fiber.Map{"error": "Không thể chia gói đề khi đề đã gửi hoặc phòng thi đã kết thúc"})
|
||||
}
|
||||
var req struct {
|
||||
Assignments []struct {
|
||||
StudentRkID int64 `json:"studentRkId"`
|
||||
PaperID uint `json:"paperId"`
|
||||
} `json:"assignments"`
|
||||
}
|
||||
if err := c.BodyParser(&req); err != nil || len(req.Assignments) == 0 {
|
||||
return c.Status(400).JSON(fiber.Map{"error": "assignments rỗng hoặc không hợp lệ"})
|
||||
}
|
||||
count := 0
|
||||
for _, a := range req.Assignments {
|
||||
pid := a.PaperID
|
||||
res := db.Model(&models.ExamRoomStudent{}).
|
||||
Where("exam_room_id = ? AND student_rk_id = ?", roomID, a.StudentRkID).
|
||||
Update("assigned_paper_id", pid)
|
||||
if res.RowsAffected > 0 {
|
||||
count++
|
||||
}
|
||||
}
|
||||
return c.JSON(fiber.Map{"assigned": count})
|
||||
}
|
||||
}
|
||||
|
||||
// POST /api/exam-rooms/:id/send-papers
|
||||
func SendExamPapersHandler(db *gorm.DB) fiber.Handler {
|
||||
return func(c *fiber.Ctx) error {
|
||||
|
||||
Reference in New Issue
Block a user