80 lines
1.8 KiB
Go
80 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
swaggerFiles "github.com/swaggo/files"
|
|
ginSwagger "github.com/swaggo/gin-swagger"
|
|
|
|
"gitea.maison43.duckdns.org/gilles/matosbox/docs"
|
|
"gitea.maison43.duckdns.org/gilles/matosbox/internal/data/ent"
|
|
"gitea.maison43.duckdns.org/gilles/matosbox/internal/handlers"
|
|
)
|
|
|
|
// @title MatosBox API
|
|
// @version 0.1.0
|
|
// @description API MatosBox pour la gestion d'inventaire.
|
|
// @BasePath /v1
|
|
func main() {
|
|
// Config simple : port via PORT, defaut 8080.
|
|
port := os.Getenv("PORT")
|
|
if port == "" {
|
|
port = "8080"
|
|
}
|
|
|
|
r := gin.Default()
|
|
|
|
// Connexion base de donnees.
|
|
driver := os.Getenv("DATABASE_DRIVER")
|
|
if driver == "" {
|
|
driver = "sqlite3"
|
|
}
|
|
dsn := os.Getenv("DATABASE_URL")
|
|
if dsn == "" {
|
|
dsn = "file:./data/matosbox.db?_fk=1"
|
|
}
|
|
|
|
client, err := ent.Open(driver, dsn)
|
|
if err != nil {
|
|
log.Fatalf("connexion base impossible: %v", err)
|
|
}
|
|
defer func() {
|
|
if err := client.Close(); err != nil {
|
|
log.Printf("fermeture base impossible: %v", err)
|
|
}
|
|
}()
|
|
|
|
// Activer WAL pour SQLite si disponible.
|
|
if driver == "sqlite3" {
|
|
if _, err := client.ExecContext(context.Background(), "PRAGMA journal_mode = WAL;"); err != nil {
|
|
log.Printf("activation WAL impossible: %v", err)
|
|
}
|
|
}
|
|
|
|
// Auto-creation du schema en dev. A remplacer par migrations en prod.
|
|
if err := client.Schema.Create(context.Background()); err != nil {
|
|
log.Fatalf("creation schema impossible: %v", err)
|
|
}
|
|
|
|
// Route de sante pour verifier que le backend repond.
|
|
r.GET("/healthz", func(c *gin.Context) {
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"status": "ok",
|
|
"version": "0.1.0",
|
|
})
|
|
})
|
|
|
|
handlers.RegisterRoutes(r, client)
|
|
|
|
// Swagger (doc API).
|
|
docs.SwaggerInfo.BasePath = "/v1"
|
|
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
|
|
|
_ = r.Run(":" + port)
|
|
}
|