caltrack/main.go
Bastian Gruber 34a9c068c5
Some checks are pending
Build and Push / build (push) Waiting to run
v1
2026-02-23 14:21:23 -04:00

62 lines
1.2 KiB
Go

package main
import (
"caltrack/ai"
"caltrack/api"
cfgpkg "caltrack/config"
"caltrack/db"
"embed"
"fmt"
"io/fs"
"log"
"net/http"
)
//go:embed web
var webFS embed.FS
func main() {
cfg, err := cfgpkg.Load()
if err != nil {
log.Printf("Warning: could not load config: %v (using defaults)", err)
}
database, err := db.New()
if err != nil {
log.Fatalf("Failed to open database: %v", err)
}
defer database.Close()
aiClient := ai.New(&cfg, database)
handler := api.New(database, aiClient, &cfg)
mux := http.NewServeMux()
handler.RegisterRoutes(mux)
// Serve embedded web files
webContent, err := fs.Sub(webFS, "web")
if err != nil {
log.Fatalf("Failed to setup web filesystem: %v", err)
}
mux.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/" {
w.Header().Set("Content-Type", "text/html; charset=utf-8")
data, _ := fs.ReadFile(webContent, "index.html")
w.Write(data)
return
}
http.FileServer(http.FS(webContent)).ServeHTTP(w, r)
})
addr := cfg.ListenAddr
if addr == "" {
addr = ":8080"
}
fmt.Printf("CalTrack running at http://localhost%s\n", addr)
if err := http.ListenAndServe(addr, mux); err != nil {
log.Fatalf("Server error: %v", err)
}
}