package handler import ( "github.com/gin-gonic/gin" "with_you/internal/pkg/response" "with_you/internal/repository" "with_you/internal/service" ) type EmptyClassroomHandler struct { classroomSyncService service.EmptyClassroomSyncService classroomRepo repository.EmptyClassroomRepository } func NewEmptyClassroomHandler( classroomSyncService service.EmptyClassroomSyncService, classroomRepo repository.EmptyClassroomRepository, ) *EmptyClassroomHandler { return &EmptyClassroomHandler{ classroomSyncService: classroomSyncService, classroomRepo: classroomRepo, } } type syncEmptyClassroomsRequest struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` Semester string `json:"semester"` WeekStart string `json:"week_start"` WeekEnd string `json:"week_end"` CampusCode string `json:"campus_code"` } func (h *EmptyClassroomHandler) SyncEmptyClassrooms(c *gin.Context) { userID := c.GetString("user_id") if userID == "" { response.Unauthorized(c, "") return } var req syncEmptyClassroomsRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "invalid request: "+err.Error()) return } result, err := h.classroomSyncService.SyncUserEmptyClassrooms(c.Request.Context(), userID, &service.SyncEmptyClassroomsRequest{ Username: req.Username, Password: req.Password, Semester: req.Semester, WeekStart: req.WeekStart, WeekEnd: req.WeekEnd, CampusCode: req.CampusCode, }) if err != nil { response.HandleError(c, err, "failed to sync empty classrooms") return } if !result.Success { response.Success(c, result) return } response.SuccessWithMessage(c, result.Message, result) } func (h *EmptyClassroomHandler) ListEmptyClassrooms(c *gin.Context) { userID := c.GetString("user_id") if userID == "" { response.Unauthorized(c, "") return } semester := c.Query("semester") if semester == "" { response.BadRequest(c, "semester is required") return } classrooms, err := h.classroomRepo.ListByUserAndSemester(userID, semester) if err != nil { response.HandleError(c, err, "failed to list empty classrooms") return } response.Success(c, gin.H{"classrooms": classrooms}) }