feat(api): add pave spec to route /v1/spec and add seed to it

Exposes the API spec in pave format, which intends to show information
about all API routes.

Also pave V1SeedPOST and V1SpecGET
This commit is contained in:
Victor Lacasse-Beaudoin 2023-11-20 15:13:42 -05:00
parent 0c7009b16b
commit 7bf489315e
15 changed files with 152 additions and 25 deletions

View file

@ -5,6 +5,7 @@ import (
"net/http"
"sort"
"codeberg.org/vlbeaudoin/pave"
"git.agecem.com/agecem/agecem-org/apiresponse"
"git.agecem.com/agecem/agecem-org/config"
"git.agecem.com/agecem/agecem-org/media"
@ -15,6 +16,7 @@ import (
type V1Handler struct {
Config config.Config
MediaClient *media.MediaClient
Pave *pave.Pave
}
// API Handlers
@ -30,7 +32,7 @@ func (h *V1Handler) HandleV1(c echo.Context) error {
// HandleV1Seed créé des buckets dans minio selon la liste de buckets dans server.documents.buckets
// Les buckets sont créés avec paramètres par défaut, et sont ensuite visible dans /v1/bucket.
func (h *V1Handler) HandleV1Seed(c echo.Context) error {
var response apiresponse.V1SeedResponse
var response apiresponse.V1SeedPOST
new_buckets, err := h.MediaClient.Seed()
response.Data.Buckets = new_buckets
@ -56,7 +58,7 @@ func (h *V1Handler) HandleV1Seed(c echo.Context) error {
// HandleV1BucketList affiche les buckets permis par server.documents.buckets, qui existent.
func (h *V1Handler) HandleV1BucketList(c echo.Context) error {
var response apiresponse.V1BucketListResponse
var response apiresponse.V1BucketList
var buckets = make(map[string]string)
@ -83,7 +85,7 @@ func (h *V1Handler) HandleV1BucketList(c echo.Context) error {
}
func (h *V1Handler) HandleV1BucketRead(c echo.Context) error {
var response apiresponse.V1BucketReadResponse
var response apiresponse.V1BucketRead
bucket := c.Param("bucket")
@ -137,7 +139,7 @@ func (h *V1Handler) HandleV1BucketRead(c echo.Context) error {
// HandleV1DocumentCreate permet d'ajouter un object dans un bucket, par multipart/form-data
func (h *V1Handler) HandleV1DocumentCreate(c echo.Context) error {
var response apiresponse.V1DocumentCreateResponse
var response apiresponse.V1DocumentCreate
bucket := c.Param("bucket")

36
apihandler/spec.go Normal file
View file

@ -0,0 +1,36 @@
package apihandler
import (
"fmt"
"net/http"
"git.agecem.com/agecem/agecem-org/apirequest"
"git.agecem.com/agecem/agecem-org/apiresponse"
"git.agecem.com/agecem/agecem-org/version"
"github.com/labstack/echo/v4"
)
const DescriptionV1SpecGET string = "Afficher le API spec en format pave"
func (h *V1Handler) HandleV1Spec(c echo.Context) error {
var request apirequest.V1SpecGET
var response apiresponse.V1SpecGET
if !request.Complete() {
response.Message = "Incomplete V1SpecGET request received"
response.StatusCode = http.StatusBadRequest
return c.JSON(response.StatusCode, response)
}
response.Data.Spec = fmt.Sprintf("# pave spec for agecem-org %s", version.Version())
for _, route := range h.Pave.SortedRouteStrings() {
response.Data.Spec = fmt.Sprintf("%s%s", response.Data.Spec, route)
}
response.Message = "ok"
response.StatusCode = http.StatusOK
return c.JSON(response.StatusCode, response)
}