generated from CubeCraft-Creations/Tracehound
CUB-187+188+191+193: Recording handlers, status ingestion, SSE endpoint
ci/verify Branch verified
ci/verify Branch verified
This commit is contained in:
+26
-7
@@ -11,8 +11,10 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/cubecraft/remoterig/internal/api"
|
||||
"github.com/cubecraft/remoterig/internal/auth"
|
||||
"github.com/cubecraft/remoterig/internal/db"
|
||||
"github.com/cubecraft/remoterig/internal/events"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
@@ -47,13 +49,16 @@ func main() {
|
||||
}
|
||||
|
||||
// Open database
|
||||
db, err := db.Open(cfg.DBPath)
|
||||
sqlDB, err := db.Open(cfg.DBPath)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to open database: %v", err)
|
||||
}
|
||||
defer db.Close()
|
||||
defer sqlDB.Close()
|
||||
log.Printf("Database open: %s", cfg.DBPath)
|
||||
|
||||
// Create SSE hub for real-time updates
|
||||
sseHub := events.NewHub()
|
||||
|
||||
// Set up router
|
||||
r := chi.NewRouter()
|
||||
r.Use(middleware.RequestID)
|
||||
@@ -69,7 +74,7 @@ func main() {
|
||||
})
|
||||
|
||||
// API routes (auth required if API key is configured)
|
||||
r.Mount("/api/v1", auth.Middleware(cfg.APIKey)(apiRouter(db)))
|
||||
r.Mount("/api/v1", auth.Middleware(cfg.APIKey)(apiRouter(sseHub, sqlDB)))
|
||||
|
||||
// Create server
|
||||
httpServer := &http.Server{
|
||||
@@ -98,10 +103,24 @@ func main() {
|
||||
}
|
||||
|
||||
// apiRouter creates the API route tree.
|
||||
func apiRouter(database *db.DB) http.Handler {
|
||||
func apiRouter(sseHub *events.Hub, database *db.DB) http.Handler {
|
||||
r := chi.NewRouter()
|
||||
// TODO: register handler routes here
|
||||
// Example: r.Get("/cameras", handlers.ListCameras(database))
|
||||
|
||||
// Camera management routes
|
||||
r.Get("/cameras", api.ListCameras(database))
|
||||
r.Post("/cameras", api.RegisterCamera(database))
|
||||
r.Get("/cameras/{id}", api.GetCameraDetail(database))
|
||||
|
||||
// Recording control routes
|
||||
r.Post("/cameras/{id}/start", api.StartRecording(database))
|
||||
r.Post("/cameras/{id}/stop", api.StopRecording(database))
|
||||
|
||||
// Status ingestion (from ESP32 nodes)
|
||||
r.Post("/cameras/{id}/status", api.PushStatus(database))
|
||||
|
||||
// Real-time events (SSE)
|
||||
r.Handle("/events/stream", sseHub.Handler())
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
@@ -131,4 +150,4 @@ func loadConfig(path string) (*Config, error) {
|
||||
}
|
||||
|
||||
return &cfg, nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user