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:
parent
0c7009b16b
commit
7bf489315e
15 changed files with 152 additions and 25 deletions
|
@ -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
36
apihandler/spec.go
Normal 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)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue