fix(apihandler): finaliser implémentation de V1DocumentsPOST

This commit is contained in:
Victor Lacasse-Beaudoin 2023-12-19 19:40:58 -05:00
parent 220da4d695
commit 92886a8b8b

View file

@ -12,9 +12,13 @@ import (
)
/*
V1DocumentPOST permet d'ajouter un object dans un bucket, par multipart/form-data
V1DocumentsPOST permet d'ajouter un object dans un bucket, par multipart/form-data
WIP
Example:
Téléverser plusieurs fichiers à cette route avec `curl`:
curl <endpoint> -F 'documents=@example.pdf' -F 'documents=@example.md;type=text/markdown'
*/
func (h *V1Handler) V1DocumentsPOST(c echo.Context) (err error) {
var request apirequest.V1DocumentsPOST
@ -22,19 +26,36 @@ func (h *V1Handler) V1DocumentsPOST(c echo.Context) (err error) {
request.Params.Bucket = c.Param("bucket")
var allowed bool
for allowedBucket := range h.Config.Server.Documents.Buckets {
if request.Params.Bucket == allowedBucket {
allowed = true
}
}
if !allowed {
return c.JSON(apiresponse.NotFoundResponse())
}
form, err := c.MultipartForm()
if err != nil {
response.StatusCode = http.StatusBadRequest
response.Message = fmt.Sprintf("Téléversement invalide: %s", err)
response.StatusCode = http.StatusBadRequest
return c.JSON(response.StatusCode, response)
}
if form == nil {
return c.JSON(http.StatusBadRequest, "MultipartForm pointer vers une addresse mémoire nil")
response.Message = "MultipartForm pointe vers une addresse mémoire nil"
response.StatusCode = http.StatusBadRequest
return c.JSON(response.StatusCode, response)
}
if len(form.File) == 0 {
return c.JSON(http.StatusBadRequest, "Veuillez sélectionner au moins 1 document à téléverser")
response.Message = "Veuillez sélectionner au moins 1 document à téléverser"
response.StatusCode = http.StatusBadRequest
return c.JSON(response.StatusCode, response)
}
for inputName, inputFileHeaders := range form.File {
@ -44,16 +65,22 @@ func (h *V1Handler) V1DocumentsPOST(c echo.Context) (err error) {
}
if request.Data.Documents == nil {
return c.JSON(http.StatusBadRequest, "Impossible d'obtenir les documents depuis le formulaire")
response.Message = "Impossible d'obtenir les documents depuis le formulaire"
response.StatusCode = http.StatusBadRequest
return c.JSON(response.StatusCode, response)
}
if !request.Complete() {
return c.JSON(http.StatusBadRequest, "Requête V1DocumentsPOST incomplète reçue")
response.Message = "Requête V1DocumentsPOST incomplète reçue"
response.StatusCode = http.StatusBadRequest
return c.JSON(response.StatusCode, response)
}
response.StatusCode, response.Message = h.MediaClient.UploadFormFiles(request.Data.Documents)
response.StatusCode, response.Message = h.MediaClient.UploadFormFiles(request.Params.Bucket, request.Data.Documents)
return c.JSON(response.StatusCode, response.Message)
return c.JSON(response.StatusCode, response)
}
// V1DocumentPOST permet d'ajouter un object dans un bucket, par multipart/form-data