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:
+14
-16
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user