Skip to content

Instantly share code, notes, and snippets.

@tofl
Last active December 17, 2020 16:26
Show Gist options
  • Save tofl/1c9b07c983071a6552deb75ea0544cc9 to your computer and use it in GitHub Desktop.
Save tofl/1c9b07c983071a6552deb75ea0544cc9 to your computer and use it in GitHub Desktop.
package main
import (
"bytes"
"net/http"
"github.com/labstack/echo/v4"
"encoding/json"
"os"
)
// La structure de données `Infraction` recevra le contenu de la requête,
// soit les infractions envoyées par les radars. Les données peuvent être
// au format JSON, XML, form-data, x-www-form-urlencoded ou même au sein
// de l'url (via des query parameters).
// L'image envoyée doit être encodée au format base64url
type Infraction struct {
RadarId int `json:"radarId" xml:"radarId" form:"radarId" query:"radarId"`
Speed float64 `json:"speed" xml:"speed" form:"speed" query:"speed"`
HasPhone bool `json:"hasPhone" xml:"hasPhone" form:"hasPhone" query:"hasPhone"`
Image string `json:"image" xml:"image" form:"image" query:"image"`
}
func formatData(c echo.Context) error {
// On récupère les éléments du corps de la requête
body := new(Infraction)
if err := c.Bind(body); err != nil {
return err
}
// On convertit l'infraction au format JSON
infractionJson, err := json.Marshal(body)
if err != nil {
return err
}
// Sauvegarde des données en base.
// Les données sont passées au microservice base de données à l'aide
// d'une requête HTTP. L'url du microservice base de données est contenu
// dans une variable d'environnement.
http.Post(os.Getenv("DATABASE_MS_URL"), "application/json", bytes.NewBuffer(infractionJson))
// Réponse OK, on retourne le contenu de la requête au format JSON
return c.String(http.StatusOK, string(infractionJson))
}
func main() {
e := echo.New()
// Ici, le routeur ne contient qu'une seule route
e.POST("/format", formatData)
e.Logger.Fatal(e.Start(":1323"))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment