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 += `| ${k} | ${Math.floor(balances[k]["$"])} |
`
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)
}