balance and users list

master
Jason Staten 2 years ago
parent 4cff7ed0c7
commit a6c0d87eab

@ -0,0 +1,35 @@
package cmd
import (
"flag"
"fmt"
)
func balance(args []string) error {
fs := flag.NewFlagSet("balance", flag.ExitOnError)
var userId int64
fs.Int64Var(&userId, "userId", 0, "Id of user (required)")
fs.Parse(args)
if userId <= 0 {
fs.Usage()
return fmt.Errorf("Missing userId")
}
tx, err := readDb()
if err != nil {
return err
}
total := float64(0)
for _, r := range tx.Records {
if r.UserId == uint64(userId) {
total += r.Amount
}
}
fmt.Printf("UserId: %d\n", userId)
fmt.Printf("Balance: %f\n", total)
return nil
}

@ -1,31 +1,30 @@
package cmd package cmd
import ( import (
"flag"
"fmt" "fmt"
"log"
"os" "os"
"jxs.me/proto/mps" "jxs.me/proto/mps"
) )
func Root() error { func readDb() (*mps.TransactionLog, error) {
args := flag.NewFlagSet("root", flag.ExitOnError) source := "txnlog.dat"
args.Parse(os.Args[1:])
source := args.Arg(0)
if source == "" {
return fmt.Errorf("File is required")
}
sourceFile, err := os.Open(source) sourceFile, err := os.Open(source)
if err != nil { if err != nil {
return err return nil, err
} }
defer sourceFile.Close() defer sourceFile.Close()
tx, err := mps.Parse(sourceFile)
log.Printf("Parsed %d records", tx.Header.RecordCount) return mps.Parse(sourceFile)
}
return err func Root(args []string) error {
switch args[0] {
case "users":
return users(args[1:])
case "balance":
return balance(args[1:])
default:
return fmt.Errorf("Unknown command: %s", args[0])
}
} }

@ -0,0 +1,24 @@
package cmd
import "fmt"
type zilch struct{}
func users(args []string) error {
tx, err := readDb()
if err != nil {
return err
}
idMap := map[uint64]zilch{}
for _, r := range tx.Records {
idMap[r.UserId] = zilch{}
}
fmt.Printf("Found %d users\n", len(idMap))
for id := range idMap {
fmt.Println(id)
}
return nil
}

@ -2,12 +2,13 @@ package main
import ( import (
"log" "log"
"os"
"jxs.me/proto/cmd" "jxs.me/proto/cmd"
) )
func main() { func main() {
if err := cmd.Root(); err != nil { if err := cmd.Root(os.Args[1:]); err != nil {
log.Fatal(err) log.Fatal(err)
} }
} }

Loading…
Cancel
Save