Merge branch 'feature/dbclient' into main
This commit is contained in:
commit
54b79d7db3
6 changed files with 70 additions and 22 deletions
|
@ -13,6 +13,8 @@ ADD apiresponse/ apiresponse/
|
||||||
ADD cmd/ cmd/
|
ADD cmd/ cmd/
|
||||||
ADD config/ config/
|
ADD config/ config/
|
||||||
ADD dbclient/ dbclient/
|
ADD dbclient/ dbclient/
|
||||||
|
ADD dbschema/ dbschema/
|
||||||
|
ADD dbstruct/ dbstruct/
|
||||||
ADD webcontent/ webcontent/
|
ADD webcontent/ webcontent/
|
||||||
ADD webhandler/ webhandler/
|
ADD webhandler/ webhandler/
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"git.agecem.com/agecem/bottin-ag/apierror"
|
|
||||||
"git.agecem.com/agecem/bottin-ag/apiresponse"
|
"git.agecem.com/agecem/bottin-ag/apiresponse"
|
||||||
|
"git.agecem.com/agecem/bottin-ag/dbclient"
|
||||||
bottindata "git.agecem.com/agecem/bottin/v5/data"
|
bottindata "git.agecem.com/agecem/bottin/v5/data"
|
||||||
"github.com/labstack/echo/v4"
|
"github.com/labstack/echo/v4"
|
||||||
)
|
)
|
||||||
|
@ -17,8 +17,15 @@ func DeclareRoutes(e *echo.Group, h *APIHandler) {
|
||||||
e.GET("/scan/:membre_id/", h.ScanGET)
|
e.GET("/scan/:membre_id/", h.ScanGET)
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() (handler APIHandler) {
|
/*
|
||||||
return
|
New retourne un nouveau APIHandler contenant des pointers vers les clients
|
||||||
|
nécessaires à l'exécution du API server
|
||||||
|
*/
|
||||||
|
func New(bottinAPIClient *bottindata.ApiClient, dbClient *dbclient.DBClient) APIHandler {
|
||||||
|
return APIHandler{
|
||||||
|
BottinAPIClient: bottinAPIClient,
|
||||||
|
DBClient: dbClient,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -27,6 +34,7 @@ routes
|
||||||
*/
|
*/
|
||||||
type APIHandler struct {
|
type APIHandler struct {
|
||||||
BottinAPIClient *bottindata.ApiClient
|
BottinAPIClient *bottindata.ApiClient
|
||||||
|
DBClient *dbclient.DBClient
|
||||||
}
|
}
|
||||||
|
|
||||||
// HealthGET is the handler for `GET /v:version/health/ http/1.1`
|
// HealthGET is the handler for `GET /v:version/health/ http/1.1`
|
||||||
|
@ -42,18 +50,6 @@ func (a *APIHandler) HealthGET(c echo.Context) error {
|
||||||
r.Data.BottinStatus = bottinStatus
|
r.Data.BottinStatus = bottinStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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)
|
return c.JSON(r.StatusCode, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@ type HealthGET struct {
|
||||||
Response
|
Response
|
||||||
Data struct {
|
Data struct {
|
||||||
BottinStatus string
|
BottinStatus string
|
||||||
DBStatus string
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
15
cmd/api.go
15
cmd/api.go
|
@ -9,6 +9,7 @@ import (
|
||||||
|
|
||||||
"git.agecem.com/agecem/bottin-ag/apihandler"
|
"git.agecem.com/agecem/bottin-ag/apihandler"
|
||||||
"git.agecem.com/agecem/bottin-ag/config"
|
"git.agecem.com/agecem/bottin-ag/config"
|
||||||
|
"git.agecem.com/agecem/bottin-ag/dbclient"
|
||||||
bottindata "git.agecem.com/agecem/bottin/v5/data"
|
bottindata "git.agecem.com/agecem/bottin/v5/data"
|
||||||
"github.com/labstack/echo/v4"
|
"github.com/labstack/echo/v4"
|
||||||
"github.com/labstack/echo/v4/middleware"
|
"github.com/labstack/echo/v4/middleware"
|
||||||
|
@ -31,12 +32,18 @@ var apiCmd = &cobra.Command{
|
||||||
|
|
||||||
v0 := e.Group("/v0")
|
v0 := e.Group("/v0")
|
||||||
|
|
||||||
handler := apihandler.New()
|
bottinApiClient := bottindata.NewApiClient("bottin", "localhost", "http", 1312)
|
||||||
if &handler == nil {
|
|
||||||
log.Fatal("Newly created APIHandler is nil")
|
dbClient, err := dbclient.New("db", "bottinag", "bottinag", "bottinag", 5432, false)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
handler.BottinAPIClient = bottindata.NewApiClient("bottin", "localhost", "http", 1312)
|
handler := apihandler.New(bottinApiClient, dbClient)
|
||||||
|
|
||||||
|
if err := handler.DBClient.CreateTablesIfNotExist(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
apihandler.DeclareRoutes(v0, &handler)
|
apihandler.DeclareRoutes(v0, &handler)
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,46 @@
|
||||||
// Package dbclient provides the database client used by the API server
|
// Package dbclient provides the database client used by the API server
|
||||||
package dbclient
|
package dbclient
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"git.agecem.com/agecem/bottin-ag/dbschema"
|
||||||
|
"github.com/jmoiron/sqlx"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DBClient holds a *sqlx.DB and implements methods to manipulate the database
|
||||||
|
type DBClient struct {
|
||||||
|
DB *sqlx.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(host, database, user, password string, port int, useSSL bool) (*DBClient, error) {
|
||||||
|
var SSLMode string
|
||||||
|
|
||||||
|
switch useSSL {
|
||||||
|
case true:
|
||||||
|
SSLMode = "enable"
|
||||||
|
case false:
|
||||||
|
SSLMode = "disable"
|
||||||
|
}
|
||||||
|
|
||||||
|
connectionString := fmt.Sprintf("postgres://%s:%s@%s:%d/%s?sslmode=%s",
|
||||||
|
user,
|
||||||
|
password,
|
||||||
|
host,
|
||||||
|
port,
|
||||||
|
database,
|
||||||
|
SSLMode,
|
||||||
|
)
|
||||||
|
|
||||||
|
db, err := sqlx.Connect("pgx", connectionString)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &DBClient{DB: db}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DBClient) CreateTablesIfNotExist() error {
|
||||||
|
_, err := d.DB.Exec(dbschema.Schema)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
|
@ -3,9 +3,9 @@ package dbschema
|
||||||
|
|
||||||
const Schema string = `
|
const Schema string = `
|
||||||
CREATE TABLE IF NOT EXISTS presences (
|
CREATE TABLE IF NOT EXISTS presences (
|
||||||
id VARCHAR(7) PRIMARY KEY NOT NULL,
|
id VARCHAR(7) PRIMARY KEY,
|
||||||
at TIMESTAMP NOT NULL,
|
at TIMESTAMP NOT NULL,
|
||||||
name VARCHAR(50) NOT NULL,
|
name VARCHAR(50) NOT NULL,
|
||||||
programme_id NOT NULL
|
programme_id VARCHAR(6) NOT NULL
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
Loading…
Reference in a new issue