Files

61 lines
1.6 KiB
Go
Raw Permalink Normal View History

package handlers
import (
"log/slog"
"net/http"
"strconv"
"github.com/CubeCraft-Creations/Extrudex/backend/internal/dtos"
"github.com/CubeCraft-Creations/Extrudex/backend/internal/repositories"
"github.com/CubeCraft-Creations/Extrudex/backend/internal/services"
)
// PrintJobHandler handles HTTP requests for print job operations.
type PrintJobHandler struct {
service *services.PrintJobService
}
// NewPrintJobHandler creates a PrintJobHandler with the given service.
func NewPrintJobHandler(service *services.PrintJobService) *PrintJobHandler {
return &PrintJobHandler{service: service}
}
// List handles GET /api/print-jobs — returns paginated, filtered print jobs.
func (h *PrintJobHandler) List(w http.ResponseWriter, r *http.Request) {
limit, offset := parsePagination(r)
filter := repositories.PrintJobFilter{
Status: r.URL.Query().Get("status"),
Limit: limit,
Offset: offset,
}
if pidStr := r.URL.Query().Get("printer_id"); pidStr != "" {
pid, err := strconv.Atoi(pidStr)
if err != nil {
writeJSON(w, http.StatusBadRequest, dtos.ErrorResponse{
Error: "invalid printer_id",
Code: http.StatusBadRequest,
})
return
}
filter.PrinterID = &pid
}
jobs, total, err := h.service.List(r.Context(), filter)
if err != nil {
slog.Error("failed to list print jobs", "error", err)
writeJSON(w, http.StatusInternalServerError, dtos.ErrorResponse{
Error: "internal server error",
Code: http.StatusInternalServerError,
})
return
}
writeJSON(w, http.StatusOK, dtos.ListResponse{
Data: jobs,
Total: total,
Limit: limit,
Offset: offset,
})
}