Files
matosbox/backend/cmd/app/main.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)
}