diff --git a/cmd/http/main.go b/cmd/http/main.go index bd88859..597669e 100644 --- a/cmd/http/main.go +++ b/cmd/http/main.go @@ -1,32 +1,16 @@ package http import ( - "embed" "flag" "fmt" - "io/fs" "log" "net/http" - "os" _ "embed" "gogs.inhome.blapointe.com/ana-ledger/src/ledger" ) -//go:embed public/* -var _staticFileDir embed.FS -var publicHandler = func() http.Handler { - if os.Getenv("DEBUG") != "" { - return http.FileServer(http.Dir("./http/public")) - } - sub, err := fs.Sub(_staticFileDir, "public") - if err != nil { - panic(err) - } - return http.FileServer(http.FS(sub)) -}() - func Main() { likeName := flag.String("like-name", ".", "regexp to match") likeBefore := flag.String("like-before", "9", "date str to compare") diff --git a/cmd/http/public/transactions.html b/cmd/http/public/transactions.html index 0c7acf3..12a47cb 100644 --- a/cmd/http/public/transactions.html +++ b/cmd/http/public/transactions.html @@ -35,12 +35,14 @@ function load() { http("GET", "/api/transactions" /*?f="+f*/, (body, status) => { var d = JSON.parse(body) + console.log("loading", d) loadBalances(d.balances) loadDeltas(d.deltas) loadLastNLines(d.lastNLines) }) } function loadBalances(balances) { + console.log("loading balances", balances) var result = `` for (var k in balances) { result += `` diff --git a/cmd/http/router.go b/cmd/http/router.go index af84c97..dc999d0 100644 --- a/cmd/http/router.go +++ b/cmd/http/router.go @@ -1,10 +1,12 @@ package http import ( + "embed" "encoding/json" "fmt" + "io/fs" "net/http" - "path" + "os" "slices" "strconv" "strings" @@ -15,6 +17,9 @@ import ( "gogs.inhome.blapointe.com/ana-ledger/src/view" ) +//go:embed public/* +var _staticFileDir embed.FS + type Router struct { files ledger.Files like struct { @@ -42,38 +47,48 @@ func NewRouter(files ledger.Files, likeName, likeBefore, likeAfter string, group } func (router Router) ServeHTTP(w http.ResponseWriter, r *http.Request) { - bpis, err := router.bpis() - if err != nil { - panic(err) + switch strings.Split(r.URL.Path, "/")[1] { + case "api": + router.API(w, r) + default: + router.FS(w, r) } +} - if !strings.HasPrefix(r.URL.Path, "/api") { - publicHandler.ServeHTTP(w, r) - return - } - - reqF := router.files - if queryF := r.URL.Query().Get("f"); queryF != "" { - queryF = path.Join("http", queryF) - reqF, err = ledger.NewFiles(queryF) +func (router Router) FS(w http.ResponseWriter, r *http.Request) { + if os.Getenv("DEBUG") != "" { + http.FileServer(http.Dir("./http/public")).ServeHTTP(w, r) + } else { + sub, err := fs.Sub(_staticFileDir, "public") if err != nil { panic(err) } + http.FileServer(http.FS(sub)).ServeHTTP(w, r) } +} +func (router Router) API(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/api/transactions": - lastNLines, err := reqF.TempGetLastNLines(20) + bpis, err := router.bpis() if err != nil { panic(err) } - deltas, err := reqF.Deltas() + + lastNLines, err := router.files.TempGetLastNLines(20) + if err != nil { + panic(err) + } + deltas, err := router.files.Deltas() if err != nil { panic(err) } json.NewEncoder(w).Encode(map[string]any{ - "deltas": deltas.Like(ledger.LikeAfter(time.Now().Add(-1 * time.Hour * 24 * 365 / 2).Format("2006-01"))), - "balances": deltas.Balances().Like("^AssetAccount:").WithBPIs(bpis), + "deltas": deltas.Like(ledger.LikeAfter(time.Now().Add(-1 * time.Hour * 24 * 365 / 2).Format("2006-01"))), + "balances": deltas.Balances(). + Like("^(Bel:Asset|Zach:Asset|HouseyMcHouseface:Debts:Credit)"). + Group(`^[^:]*`). + WithBPIs(bpis), "lastNLines": lastNLines, }) return @@ -86,14 +101,14 @@ func (router Router) ServeHTTP(w http.ResponseWriter, r *http.Request) { if err := json.NewDecoder(r.Body).Decode(&lines); err != nil { panic(err) } - if err := reqF.TempSetLastNLines(20, lines); err != nil { + if err := router.files.TempSetLastNLines(20, lines); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) } w.WriteHeader(http.StatusResetContent) return } - deltas, err := reqF.Deltas() + deltas, err := router.files.Deltas() if err != nil { panic(err) } @@ -178,6 +193,10 @@ func (router Router) ServeHTTP(w http.ResponseWriter, r *http.Request) { if err != nil { panic(err) } + bpis, err := router.bpis() + if err != nil { + panic(err) + } bpis, err = ana.BPIsWithFixedGrowthPrediction(bpis, window, currency, rate) if err != nil { panic(err) @@ -186,6 +205,10 @@ func (router Router) ServeHTTP(w http.ResponseWriter, r *http.Request) { } if r.URL.Query().Get("bpi") == "true" { + bpis, err := router.bpis() + if err != nil { + panic(err) + } register = register.WithBPIs(bpis) predicted = predicted.WithBPIs(bpis) }
${k}${Math.floor(balances[k]["$"])}