Co-authored-by: dev_agent <dev_agent@cubecraftlabs.com> Co-committed-by: dev_agent <dev_agent@cubecraftlabs.com>
30 lines
811 B
Go
30 lines
811 B
Go
package server
|
|
|
|
import (
|
|
"errors"
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
|
|
"code.cubecraftlabs.com/Maniacs_Mansion/Meal-Quest/internal/jobs"
|
|
)
|
|
|
|
// getJob serves GET /api/v1/jobs/{id}: the job's id, kind, status, latest
|
|
// result and error.
|
|
func getJob(logger *slog.Logger, runner *jobs.Runner) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
job, err := runner.Get(r.Context(), chi.URLParam(r, "id"))
|
|
if errors.Is(err, jobs.ErrNotFound) {
|
|
writeError(w, r, logger, http.StatusNotFound, "not_found", "job not found")
|
|
return
|
|
}
|
|
if err != nil {
|
|
logger.ErrorContext(r.Context(), "get job", "error", err)
|
|
writeError(w, r, logger, http.StatusInternalServerError, "internal", "internal error")
|
|
return
|
|
}
|
|
writeJSON(w, r, logger, http.StatusOK, job)
|
|
}
|
|
}
|