CUB-187+188+191+193: Recording handlers, status ingestion, SSE endpoint
ci/verify Branch verified

This commit is contained in:
2026-05-18 17:52:48 -04:00
parent 5cc57446e5
commit 111cce4c84
4 changed files with 360 additions and 7 deletions
+26 -7
View File
@@ -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
}
}