71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
package handler
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"ips-lacpass-backend/internal/core"
|
|
errors2 "ips-lacpass-backend/internal/errors"
|
|
"net/http"
|
|
)
|
|
|
|
type IpsHandler struct {
|
|
FhirService core.FhirService
|
|
}
|
|
|
|
func NewIpsHandler(s core.FhirService) *IpsHandler {
|
|
return &IpsHandler{
|
|
FhirService: s,
|
|
}
|
|
}
|
|
|
|
// GetIPS godoc
|
|
//
|
|
// @Summary Fetch IPS from national node.
|
|
// @Description Fetch IPS from national node using session access token user identifier.
|
|
// @Tags IPS FHIR
|
|
// @Produce json
|
|
//
|
|
// @Security ApiKeyAuth
|
|
//
|
|
// @Success 200 {object} fhir.Bundle
|
|
// @Failure 400
|
|
// @Failure 404
|
|
// @Failure 500
|
|
// @Router /ips [get]
|
|
func (ih *IpsHandler) Get(w http.ResponseWriter, r *http.Request) {
|
|
ctx := r.Context()
|
|
ips, err := ih.FhirService.GetIps(ctx)
|
|
if err != nil {
|
|
var httpErr *errors2.HttpError
|
|
if errors.As(err, &httpErr) {
|
|
res, err := json.Marshal(httpErr.Body)
|
|
if err != nil {
|
|
http.Error(w, "Failed to encode error response", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
w.WriteHeader(httpErr.StatusCode)
|
|
_, err = w.Write(res)
|
|
if err != nil {
|
|
http.Error(w, "Failed to write response", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
} else {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
|
|
}
|
|
return
|
|
}
|
|
|
|
res, err := json.Marshal(ips)
|
|
if err != nil {
|
|
http.Error(w, "Failed to encode response", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
w.WriteHeader(http.StatusOK)
|
|
_, err = w.Write(res)
|
|
if err != nil {
|
|
http.Error(w, "Failed to write response", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|