Permettre upload par CSV
This commit is contained in:
parent
4a4e35b76c
commit
7b9ff49444
5 changed files with 52 additions and 15 deletions
|
@ -1,12 +1,16 @@
|
|||
package handlers
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
"git.agecem.com/agecem/bottin/v5/data"
|
||||
"git.agecem.com/agecem/bottin/v5/models"
|
||||
"git.agecem.com/agecem/bottin/v5/responses"
|
||||
"github.com/labstack/echo/v4"
|
||||
|
||||
"github.com/gocarina/gocsv"
|
||||
)
|
||||
|
||||
func PostMembres(c echo.Context) error {
|
||||
|
@ -32,9 +36,21 @@ func PostMembres(c echo.Context) error {
|
|||
return c.JSON(response.StatusCode, response)
|
||||
}
|
||||
case "text/csv":
|
||||
response.StatusCode = http.StatusNotImplemented
|
||||
response.Message = "Not Implemented"
|
||||
return c.JSON(response.StatusCode, response)
|
||||
body := c.Request().Body
|
||||
if body == nil {
|
||||
response.StatusCode = http.StatusBadRequest
|
||||
response.Message = "Request body is empty"
|
||||
return c.JSON(response.StatusCode, response)
|
||||
}
|
||||
defer body.Close()
|
||||
|
||||
// Parse the CSV data from the request body using gocsv.
|
||||
if err := gocsv.Unmarshal(body, &membres); err != nil {
|
||||
response.StatusCode = http.StatusBadRequest
|
||||
response.Message = "Could not unmarshal into membres"
|
||||
response.Error = err.Error()
|
||||
return c.JSON(response.StatusCode, response)
|
||||
}
|
||||
default:
|
||||
response.StatusCode = http.StatusBadRequest
|
||||
response.Message = "Invalid Content-Type"
|
||||
|
@ -85,9 +101,27 @@ func PostProgrammes(c echo.Context) error {
|
|||
return c.JSON(response.StatusCode, response)
|
||||
}
|
||||
case "text/csv":
|
||||
response.StatusCode = http.StatusNotImplemented
|
||||
response.Message = "Not Implemented"
|
||||
return c.JSON(response.StatusCode, response)
|
||||
body := c.Request().Body
|
||||
if body == nil {
|
||||
response.StatusCode = http.StatusBadRequest
|
||||
response.Message = "Request body is empty"
|
||||
return c.JSON(response.StatusCode, response)
|
||||
}
|
||||
defer body.Close()
|
||||
|
||||
gocsv.SetCSVReader(func(in io.Reader) gocsv.CSVReader {
|
||||
r := csv.NewReader(in)
|
||||
r.Comma = ';'
|
||||
return r // Allows use ; as delimiter
|
||||
})
|
||||
|
||||
// Parse the CSV data from the request body using gocsv.
|
||||
if err := gocsv.Unmarshal(body, &programmes); err != nil {
|
||||
response.StatusCode = http.StatusBadRequest
|
||||
response.Message = "Could not unmarshal into programmes"
|
||||
response.Error = err.Error()
|
||||
return c.JSON(response.StatusCode, response)
|
||||
}
|
||||
default:
|
||||
response.StatusCode = http.StatusBadRequest
|
||||
response.Message = "Invalid Content-Type"
|
||||
|
|
Reference in a new issue