package main import ( "encoding/json" "net/http" //"context" "fmt" "github.com/ggicci/httpin" "github.com/go-chi/chi/v5" "github.com/rs/zerolog/log" "nickiel.net/recount_server/db" "nickiel.net/recount_server/types" ) const DEFAULT_RESULT_COUNT = 50 type GetTransactionPaginationInput struct { ResultCount int `in:"query=result_count"` PageNum int `in:"query=page_num"` } func apiRouter() http.Handler { r := chi.NewRouter() //r.Use(ApiLoginRequired) r.With( httpin.NewInput(GetTransactionPaginationInput{}), ).Get("/get_transactions", getTransactions) r.Post("/new_transaction", newTransaction) return r } func getTransactions(w http.ResponseWriter, req *http.Request) { input := req.Context().Value(httpin.Input).(*GetTransactionPaginationInput) if input.ResultCount == 0 { input.ResultCount = DEFAULT_RESULT_COUNT } transactions := []types.Transaction{} err := db.GetTransactions(&transactions, input.ResultCount, input.PageNum); if err != nil { log.Fatal(). Err(err). Msg("Fatal error in getTransactions from db_get_transactions") } for _, trns := range transactions { //bytes, err := json.Marshal(trns) bytes, err := json.MarshalIndent(trns, "", "\t") if err != nil { log.Fatal(). Err(err). Msg("Could not marshal json") } fmt.Fprintf(w, string(bytes)) } } func newTransaction(w http.ResponseWriter, req *http.Request) { decoder := json.NewDecoder(req.Body) var t types.Transaction err := decoder.Decode(&t) if err != nil { log.Fatal(). Err(err). Msg("Could not decode incoming post data") } //fmt.Fprintf(w, "New transaction created for Account: %d, with an Amount of: %s", // t.Account, t.Amount) db.NewTransaction(t) }