Merge branch 'feature/health-get-route' into main

Ajouter echo.Group v0

Ajouter error type si dbclient ou bottinclient ne sont pas implémentés

Implémenter route /v0/health

Update Dockerfile avec packages présents
This commit is contained in:
Victor Lacasse-Beaudoin 2023-09-15 18:17:53 -04:00
commit 916a83fc02
5 changed files with 83 additions and 5 deletions

View file

@ -6,13 +6,15 @@ WORKDIR /go/src/app
COPY go.mod go.sum main.go ./
ADD apiclient/ apiclient/
ADD apierror/ apierror/
ADD apihandler/ apihandler/
ADD apiresponse/ apiresponse/
ADD cmd/ cmd/
ADD config/ config/
ADD data/ data/
ADD handlers/ handlers/
ADD models/ models/
ADD responses/ responses/
ADD templates/ templates/
ADD dbclient/ dbclient/
ADD webcontent/ webcontent/
ADD webhandler/ webhandler/
RUN CGO_ENABLED=0 go build -a -installsuffix cgo -o bottin-ag .

8
apierror/apierror.go Normal file
View file

@ -0,0 +1,8 @@
// Package apierror defines error types that can be returned by the API server
package apierror
type ErrBottinOrDBNotImplemented struct{}
func (e *ErrBottinOrDBNotImplemented) Error() string {
return "Database client or agecem/bottin API client not implemented"
}

View file

@ -1,2 +1,47 @@
// Package apihandler provides handlers for API routes
package apihandler
import (
"net/http"
"git.agecem.com/agecem/bottin-ag/apierror"
"git.agecem.com/agecem/bottin-ag/apiresponse"
"github.com/labstack/echo/v4"
)
// DeclareRoutes declares the API server endpoints for the specified Group
func DeclareRoutes(e *echo.Group, h *APIHandler) {
e.GET("/health/", h.HealthGET)
}
func New() (handler *APIHandler) {
return
}
/*
APIHandler is the struct that implements the actual logic for the API server
routes
*/
type APIHandler struct{}
// HealthGET is the handler for `GET /v:version/health/ http/1.1`
func (a *APIHandler) HealthGET(c echo.Context) error {
var r apiresponse.HealthGET
// TODO
r.Data.BottinStatus = "not implemented"
// TODO
r.Data.DBStatus = "not implemented"
if r.Data.BottinStatus == "not implemented" || r.Data.DBStatus == "not implemented" {
var err apierror.ErrBottinOrDBNotImplemented
r.Error = err.Error()
r.StatusCode = http.StatusInternalServerError
r.Message = "not ok"
return c.JSON(r.StatusCode, r)
}
return c.JSON(r.StatusCode, r)
}

View file

@ -1,2 +1,18 @@
// Package apiresponse provides response types for API routes
package apiresponse
// Response defines the basic response types fields
type Response struct {
Error string
Message string
StatusCode int
}
// HealthGET is the response type for `GET /v:version/health/ http/1.1`
type HealthGET struct {
Response
Data struct {
BottinStatus string
DBStatus string
}
}

View file

@ -7,6 +7,7 @@ import (
"fmt"
"log"
"git.agecem.com/agecem/bottin-ag/apihandler"
"git.agecem.com/agecem/bottin-ag/config"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
@ -27,6 +28,12 @@ var apiCmd = &cobra.Command{
e.Pre(middleware.AddTrailingSlash())
v0 := e.Group("/v0")
handler := apihandler.New()
apihandler.DeclareRoutes(v0, handler)
e.Start(fmt.Sprintf(":%d", cfg.API.Port))
},
}