package http import ( "encoding/json" "log/slog" "net/http" "github.com/jobs-scraper/internal/ports" "github.com/jobs-scraper/internal/utils" "github.com/gorilla/mux" ) // JobHandler handles HTTP requests related to cars type JobHandler struct { jobCommands *ports.JobCommands } // NewVehicleHandler creates a new instance of VehicleHandler func NewJobHandler(jobCommands *ports.JobCommands) *JobHandler { return &JobHandler{ jobCommands: jobCommands, } } // RegisterRoutes registers all routes to the router func (h *JobHandler) RegisterRoutes(router *mux.Router) { vehicles := router.PathPrefix("/jobs").Subrouter() //vehicles.Use(AuthMiddleware) vehicles.HandleFunc("", utils.Make(h.CreateJob)).Methods("POST") // vehicles.HandleFunc("", utils.Make(h.ListVehicles)).Methods("GET") // vehicles.HandleFunc("/{id}", utils.Make(h.GetVehicle)).Methods("GET") // vehicles.HandleFunc("/buy", utils.Make(h.BuyVehicle)).Methods("POST") // vehicles.HandleFunc("/sell", utils.Make(h.SellVehicle)).Methods("POST") } // CreateJob handles the creation of a new job // @Summary Create a new job // @Description Creates a new job with the provided specifications // @Tags jobs // @Accept json // @Produce json // @Param job body ports.CreateJobCommand true "Job creation data" // @Success 201 {object} map[string]string "Successfully created job" // @Failure 400 {object} map[string]string "Invalid request data" // @Failure 500 {object} map[string]string "Internal server error" // @Router /jobs [post] func (h *JobHandler) CreateJob(w http.ResponseWriter, r *http.Request) error { var cmd ports.CreateJobCommand if err := json.NewDecoder(r.Body).Decode(&cmd); err != nil { slog.Error(err.Error()) return utils.NewAPIError(http.StatusBadRequest, utils.InvalidJSON()) } err := h.jobCommands.CreateJob.Handle(cmd) if err != nil { slog.Error(err.Error()) return utils.NewAPIError(http.StatusInternalServerError, err) } utils.WriteJSON(w, http.StatusCreated, map[string]string{"message": "Success"}) return nil }