ok that is pretty nice
parent
f436a6d046
commit
12e5c37ba3
|
|
@ -7,7 +7,6 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
|
||||||
"slices"
|
"slices"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
@ -50,43 +49,85 @@ func main() {
|
||||||
like = append(like, ledger.LikeAfter(*likeAfter))
|
like = append(like, ledger.LikeAfter(*likeAfter))
|
||||||
|
|
||||||
foo := func(w http.ResponseWriter, r *http.Request) {
|
foo := func(w http.ResponseWriter, r *http.Request) {
|
||||||
switch path.Dir(r.URL.Path) {
|
foolike := make(ledger.Likes, 0)
|
||||||
case "/bal":
|
for _, v := range r.URL.Query()["likeName"] {
|
||||||
register := deltas.Like(like...).Register()
|
foolike = append(foolike, ledger.LikeName(v))
|
||||||
nameCurrencyDateValue := map[string]map[ledger.Currency]map[string]float64{}
|
}
|
||||||
dates := []string{}
|
for _, v := range r.URL.Query()["likeAfter"] {
|
||||||
for date, balances := range register {
|
foolike = append(foolike, ledger.LikeAfter(v))
|
||||||
dates = append(dates, date)
|
}
|
||||||
for name, balance := range balances {
|
for _, v := range r.URL.Query()["likeBefore"] {
|
||||||
for currency, value := range balance {
|
foolike = append(foolike, ledger.LikeBefore(v))
|
||||||
if _, ok := nameCurrencyDateValue[name]; !ok {
|
}
|
||||||
nameCurrencyDateValue[name] = make(map[ledger.Currency]map[string]float64)
|
if len(foolike) == 0 {
|
||||||
}
|
foolike = like
|
||||||
if _, ok := nameCurrencyDateValue[name][currency]; !ok {
|
}
|
||||||
nameCurrencyDateValue[name][currency] = make(map[string]float64)
|
|
||||||
}
|
register := deltas.Like(foolike...).Register()
|
||||||
nameCurrencyDateValue[name][currency][date] += value
|
nameCurrencyDateValue := map[string]map[ledger.Currency]map[string]float64{}
|
||||||
|
dates := []string{}
|
||||||
|
for date, balances := range register {
|
||||||
|
dates = append(dates, date)
|
||||||
|
for name, balance := range balances {
|
||||||
|
for currency, value := range balance {
|
||||||
|
if _, ok := nameCurrencyDateValue[name]; !ok {
|
||||||
|
nameCurrencyDateValue[name] = make(map[ledger.Currency]map[string]float64)
|
||||||
}
|
}
|
||||||
|
if _, ok := nameCurrencyDateValue[name][currency]; !ok {
|
||||||
|
nameCurrencyDateValue[name][currency] = make(map[string]float64)
|
||||||
|
}
|
||||||
|
nameCurrencyDateValue[name][currency][date] += value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
slices.Sort(dates)
|
}
|
||||||
|
slices.Sort(dates)
|
||||||
|
|
||||||
line := charts.NewLine()
|
line := charts.NewLine()
|
||||||
line.AddXAxis(dates)
|
line.AddXAxis(dates)
|
||||||
|
|
||||||
|
switch r.URL.Path {
|
||||||
|
default:
|
||||||
|
http.NotFound(w, r)
|
||||||
|
return
|
||||||
|
case "/bal":
|
||||||
for name, currencyDateValue := range nameCurrencyDateValue {
|
for name, currencyDateValue := range nameCurrencyDateValue {
|
||||||
for currency, dateValue := range currencyDateValue {
|
for currency, dateValue := range currencyDateValue {
|
||||||
series := make([]int, len(dates))
|
series := make([]int, len(dates))
|
||||||
for i, date := range dates {
|
for i := range dates {
|
||||||
series[i] = int(dateValue[date])
|
var lastValue float64
|
||||||
|
for j := range dates[:i+1] {
|
||||||
|
if newLastValue, ok := dateValue[dates[j]]; ok {
|
||||||
|
lastValue = newLastValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
series[i] = int(lastValue)
|
||||||
}
|
}
|
||||||
key := fmt.Sprintf("%s (%s)", name, currency)
|
key := fmt.Sprintf("%s (%s)", name, currency)
|
||||||
line.AddYAxis(key, series)
|
line.AddYAxis(key, series)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := line.Render(w); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
case "/reg":
|
case "/reg":
|
||||||
|
for name, currencyDateValue := range nameCurrencyDateValue {
|
||||||
|
for currency, dateValue := range currencyDateValue {
|
||||||
|
series := make([]int, len(dates))
|
||||||
|
for i := range dates {
|
||||||
|
var prevValue float64
|
||||||
|
var lastValue float64
|
||||||
|
for j := range dates[:i+1] {
|
||||||
|
if newLastValue, ok := dateValue[dates[j]]; ok {
|
||||||
|
prevValue = lastValue
|
||||||
|
lastValue = newLastValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
series[i] = int(lastValue - prevValue)
|
||||||
|
}
|
||||||
|
key := fmt.Sprintf("%s (%s)", name, currency)
|
||||||
|
line.AddYAxis(key, series)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := line.Render(w); err != nil {
|
||||||
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue