feat: enhance Dockerfile for SQLite support and update main.go for MySQL connection; add sensor creation endpoint and improve wait-for-mqtt script

This commit is contained in:
2026-01-10 14:20:38 +01:00
parent a6196cc0ee
commit 81677943c4
5 changed files with 89 additions and 35 deletions
+14 -16
View File
@@ -29,16 +29,16 @@ func main() {
log.Fatalf("failed to load config: %v", err)
}
// connect to database
// connect to MySQL database
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?parseTime=true", cfg.Database.User, cfg.Database.Password, cfg.Database.Host, cfg.Database.Port, cfg.Database.Name)
db, err := sql.Open("mysql", dsn)
sqlDB, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatalf("failed to connect to database: %v", err)
}
defer db.Close()
defer sqlDB.Close()
// test connection
if err := db.Ping(); err != nil {
if err := sqlDB.Ping(); err != nil {
log.Fatalf("failed to ping database: %v", err)
}
log.Println("connected to database")
@@ -55,7 +55,7 @@ func main() {
// connect to MQTT broker (best-effort)
var mq *mqttclient.Client
// initialize sqlite for state messages
var db *storage.DB
var stateDB *storage.DB
{
dbPath := os.Getenv("SQLITE_PATH")
if dbPath == "" {
@@ -65,8 +65,8 @@ func main() {
if err != nil {
log.Printf("warning: sqlite init failed: %v", err)
} else {
db = dbInit
storage.SetDefault(db)
stateDB = dbInit
storage.SetDefault(stateDB)
}
}
if cfg.MQTT.Broker != "" {
@@ -108,7 +108,7 @@ func main() {
r.Use(gin.Recovery())
r.Use(middleware.GinLogger())
h := &handler.Handler{DB: db, JWTSecret: cfg.Server.JWTSecret}
h := &handler.Handler{DB: sqlDB, JWTSecret: cfg.Server.JWTSecret}
// Public routes
r.GET("/health", h.Health)
@@ -122,6 +122,9 @@ func main() {
auth := r.Group("/")
auth.Use(middleware.AuthMiddleware(cfg.Server.JWTSecret))
auth.GET("/protected", h.Protected)
auth.GET("/mqttping", h.MQTTPing)
auth.GET("/messages", handler.GetMessages)
auth.POST("/sensors", h.CreateSensor)
// Device CRUD routes
auth.POST("/devices", h.CreateDevice)
@@ -152,15 +155,10 @@ func main() {
if mq != nil {
mq.Close()
}
if db != nil {
db.Close()
if stateDB != nil {
stateDB.Close()
}
log.Println("server exiting")
}
func getJWTSecret() string {
if s := os.Getenv("JWT_SECRET"); s != "" {
return s
}
return "secret"
}
// removed unused getJWTSecret helper; configuration provides JWTSecret