58 lines
2.0 KiB
Go
58 lines
2.0 KiB
Go
package handlers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"net/http"
|
|
)
|
|
|
|
type healthResponse struct {
|
|
Status string `json:"status" example:"ok"`
|
|
}
|
|
|
|
// Health is the liveness probe the ALB target group polls.
|
|
//
|
|
// @Summary Health check
|
|
// @Description Reports that the service is up and serving. Used as the ALB target group health check; it does not verify the database or S3 connections.
|
|
// @Tags system
|
|
// @Produce json
|
|
// @Success 200 {object} healthResponse
|
|
// @Router /health [get]
|
|
func Health(w http.ResponseWriter, r *http.Request) {
|
|
writeJSON(w, http.StatusOK, healthResponse{Status: "ok"})
|
|
}
|
|
|
|
// problemDetails is an error body in the RFC 9457 "Problem Details for HTTP
|
|
// APIs" format. Type stays "about:blank" — the value RFC 9457 defines for
|
|
// problems with no dedicated documentation URI. Title is a short summary that
|
|
// stays identical for every occurrence of the same problem, so clients can
|
|
// branch on it; Detail explains this particular occurrence and is the only
|
|
// member that varies with request data.
|
|
type problemDetails struct {
|
|
Type string `json:"type" example:"about:blank"`
|
|
Title string `json:"title" example:"Title is required."`
|
|
Status int `json:"status" example:"422"`
|
|
Detail string `json:"detail,omitempty" example:"The 'title' field was absent or contained only whitespace. Every video needs a non-empty title."`
|
|
}
|
|
|
|
func writeJSON(w http.ResponseWriter, status int, body any) {
|
|
writeJSONContent(w, "application/json", status, body)
|
|
}
|
|
|
|
func writeProblem(w http.ResponseWriter, status int, title, detail string) {
|
|
writeJSONContent(w, "application/problem+json", status, problemDetails{
|
|
Type: "about:blank",
|
|
Title: title,
|
|
Status: status,
|
|
Detail: detail,
|
|
})
|
|
}
|
|
|
|
func writeJSONContent(w http.ResponseWriter, contentType string, status int, body any) {
|
|
w.Header().Set("Content-Type", contentType)
|
|
w.WriteHeader(status)
|
|
if err := json.NewEncoder(w).Encode(body); err != nil {
|
|
log.Printf("Something Went Wrong Writing The Response: %s", err)
|
|
}
|
|
}
|