68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type Vehicle struct {
|
|
ID string `json:"id"`
|
|
Model string `json:"model"`
|
|
Maker string `json:"maker"`
|
|
}
|
|
|
|
var vehicles = []Vehicle{
|
|
{ID: "1", Model: "Tesla Model Y", Maker: "Tesla"},
|
|
{ID: "2", Model: "Tesla Model 3", Maker: "Tesla"},
|
|
{ID: "3", Model: "Fiat 500e", Maker: "Fiat"},
|
|
{ID: "4", Model: "Peugeot e-208", Maker: "Peugeot"},
|
|
{ID: "5", Model: "Volkswagen ID.4", Maker: "Volkswagen"},
|
|
{ID: "6", Model: "iX1", Maker: "BMW"},
|
|
}
|
|
|
|
func setupRouter() *gin.Engine {
|
|
router := gin.Default()
|
|
router.GET("/healthz", getHealthz)
|
|
router.GET("/vehicles", getVehicles)
|
|
router.GET("/vehicles/:id", getVehicleByID)
|
|
router.POST("/vehicles", postVehicles)
|
|
return router
|
|
}
|
|
|
|
func main() {
|
|
router := setupRouter()
|
|
router.Run("0.0.0.0:8080")
|
|
}
|
|
|
|
func getHealthz(c *gin.Context) {
|
|
c.Writer.WriteHeader(http.StatusOK)
|
|
}
|
|
|
|
func getVehicles(c *gin.Context) {
|
|
c.IndentedJSON(http.StatusOK, vehicles)
|
|
}
|
|
|
|
func getVehicleByID(c *gin.Context) {
|
|
id := c.Param("id")
|
|
|
|
for _, a := range vehicles {
|
|
if a.ID == id {
|
|
c.IndentedJSON(http.StatusOK, a)
|
|
return
|
|
}
|
|
}
|
|
c.Writer.WriteHeader(http.StatusNotFound)
|
|
}
|
|
|
|
func postVehicles(c *gin.Context) {
|
|
var newVehicle Vehicle
|
|
|
|
if err := c.BindJSON(&newVehicle); err != nil {
|
|
return
|
|
}
|
|
|
|
vehicles = append(vehicles, newVehicle)
|
|
c.IndentedJSON(http.StatusCreated, newVehicle)
|
|
}
|