package web import ( "fmt" "log" root "marmic/servicetrade-toolbox" "marmic/servicetrade-toolbox/internal/api" "net/http" "net/url" ) func JobsHandler(w http.ResponseWriter, r *http.Request) { session, ok := r.Context().Value("session").(*api.Session) if !ok { http.Error(w, "Unauthorized", http.StatusUnauthorized) return } tmpl := root.WebTemplates data := map[string]interface{}{ "Title": "Jobs", } switch r.URL.Path { case "/jobs": // Fetch and display search results only jobs, err := handleJobSearch(r, session) if err != nil { log.Printf("Error in job search: %v", err) data["Error"] = true data["ErrorMsg"] = "Failed to fetch jobs. Please try again later." } else { data["Jobs"] = jobs } err = tmpl.ExecuteTemplate(w, "job_search_results", data) if err != nil { log.Printf("Template execution error: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } case "/jobs/documents": // Fetch jobs and uploaded documents jobs, err := handleJobSearch(r, session) if err != nil { log.Printf("Error in job search: %v", err) data["Error"] = true data["ErrorMsg"] = "Failed to fetch jobs. Please try again later." } else { data["Jobs"] = jobs } err = tmpl.ExecuteTemplate(w, "job_document_management", data) if err != nil { log.Printf("Template execution error: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } default: http.Error(w, "Not Found", http.StatusNotFound) } } func handleJobSearch(r *http.Request, session *api.Session) ([]api.Job, error) { queryParams := r.URL.Query() cleanedParams := url.Values{} log.Printf("Searching jobs with filters: %v", queryParams) for key, values := range queryParams { for _, value := range values { if value != "" { cleanedParams.Add(key, value) } } } jobs, err := session.SearchJobs(cleanedParams) if err != nil { return nil, fmt.Errorf("error fetching jobs: %w", err) } return jobs, nil }