af13fd849c
- handlers_mutations.go: POST add_app/add_analysis/add_vault/reindex - handlers_projects.go: GET projects y project detail (apps/analysis/vaults nested) - handlers.go + main.go: cablear nuevas rutas - handlers_test.go: ajustes minimos - app.md: documentar endpoints v0.2 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
func main() {
|
|
bind := flag.String("bind", "127.0.0.1:8484", "address to bind")
|
|
flag.Parse()
|
|
|
|
root := findRegistryRoot()
|
|
if root == "" {
|
|
log.Fatal("cannot find fn_registry root (no registry.db found). Set FN_REGISTRY_ROOT or run from the registry directory.")
|
|
}
|
|
|
|
pool := NewDBPool()
|
|
for _, entry := range DiscoverDatabases(root) {
|
|
pool.Register(entry)
|
|
log.Printf("registered database: %s (%s)", entry.Alias, entry.Path)
|
|
}
|
|
|
|
srv := NewServer(pool, root)
|
|
mux := http.NewServeMux()
|
|
srv.Routes(mux)
|
|
|
|
handler := corsMiddleware(mux)
|
|
|
|
log.Printf("sqlite_api listening on %s (registry root: %s)", *bind, root)
|
|
if err := http.ListenAndServe(*bind, handler); err != nil {
|
|
log.Fatalf("server error: %v", err)
|
|
}
|
|
}
|
|
|
|
// findRegistryRoot walks up from cwd (or uses FN_REGISTRY_ROOT) to find registry.db.
|
|
func findRegistryRoot() string {
|
|
if env := os.Getenv("FN_REGISTRY_ROOT"); env != "" {
|
|
if _, err := os.Stat(filepath.Join(env, "registry.db")); err == nil {
|
|
return env
|
|
}
|
|
}
|
|
|
|
dir, err := os.Getwd()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
for {
|
|
if _, err := os.Stat(filepath.Join(dir, "registry.db")); err == nil {
|
|
return dir
|
|
}
|
|
parent := filepath.Dir(dir)
|
|
if parent == dir {
|
|
break
|
|
}
|
|
dir = parent
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func init() {
|
|
log.SetFlags(log.Ltime)
|
|
log.SetPrefix("[sqlite_api] ")
|
|
fmt.Fprintln(os.Stderr, "sqlite_api — HTTP API for fn_registry databases")
|
|
}
|