60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
package port
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"gitea.dwysokinski.me/twhelp/corev3/internal/domain"
|
|
"gitea.dwysokinski.me/twhelp/corev3/internal/port/internal/apimodel"
|
|
)
|
|
|
|
func (h *apiHTTPHandler) ListVersions(w http.ResponseWriter, r *http.Request, params apimodel.ListVersionsParams) {
|
|
domainParams := domain.NewListVersionsParams()
|
|
|
|
if params.Limit != nil {
|
|
if err := domainParams.SetLimit(*params.Limit); err != nil {
|
|
apiErrorRenderer{errors: []error{err}, formatErrorPath: formatListVersionsParamsErrorPath}.render(w, r)
|
|
return
|
|
}
|
|
}
|
|
|
|
if params.Cursor != nil {
|
|
if err := domainParams.SetEncodedCursor(*params.Cursor); err != nil {
|
|
apiErrorRenderer{errors: []error{err}, formatErrorPath: formatListVersionsParamsErrorPath}.render(w, r)
|
|
return
|
|
}
|
|
}
|
|
|
|
res, err := h.versionSvc.List(r.Context(), domainParams)
|
|
if err != nil {
|
|
apiErrorRenderer{errors: []error{err}}.render(w, r)
|
|
return
|
|
}
|
|
|
|
renderJSON(w, r, http.StatusOK, apimodel.NewListVersionsResponse(res))
|
|
}
|
|
|
|
func (h *apiHTTPHandler) GetVersion(w http.ResponseWriter, r *http.Request, versionCode apimodel.VersionCodePathParam) {
|
|
version, err := h.versionSvc.Get(r.Context(), versionCode)
|
|
if err != nil {
|
|
apiErrorRenderer{errors: []error{err}}.render(w, r)
|
|
return
|
|
}
|
|
|
|
renderJSON(w, r, http.StatusOK, apimodel.NewGetVersionResponse(version))
|
|
}
|
|
|
|
func formatListVersionsParamsErrorPath(elems []errorPathElement) []string {
|
|
if elems[0].model != "ListVersionsParams" {
|
|
return nil
|
|
}
|
|
|
|
switch elems[0].field {
|
|
case "cursor":
|
|
return []string{"$query", "cursor"}
|
|
case "limit":
|
|
return []string{"$query", "limit"}
|
|
default:
|
|
return nil
|
|
}
|
|
}
|