add post transactions endpoint

master
Bel LaPointe 2021-08-30 10:55:59 -04:00
parent 03ec3247f9
commit 1345071f0a
2 changed files with 74 additions and 0 deletions

View File

@ -22,6 +22,8 @@ func (server Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
switch r.Method + r.URL.Path {
case "GET/api/transactions":
server.getTransactions(w, r)
case "POST/api/transactions":
server.postTransactions(w, r)
case "PUT/api/transactions":
server.putTransactions(w, r)
case "GET/api/balances":
@ -50,6 +52,30 @@ func (server Server) getTransactions(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(map[string]interface{}{"Transactions": transactions})
}
func (server Server) postTransactions(w http.ResponseWriter, r *http.Request) {
var request struct {
Transaction
}
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
server.err(w, r, err)
return
}
if err := server.ledger.NewTransaction(); err != nil {
server.err(w, r, err)
return
}
transactions, err := server.ledger.Transactions()
if err != nil {
server.err(w, r, err)
return
}
if err := server.ledger.SetTransaction(len(transactions)-1, request.Transaction); err != nil {
server.err(w, r, err)
return
}
json.NewEncoder(w).Encode(map[string]interface{}{"ok": true})
}
func (server Server) putTransactions(w http.ResponseWriter, r *http.Request) {
var request struct {
IDX int `json:"idx"`

48
server_test.go Normal file
View File

@ -0,0 +1,48 @@
package main
import (
"net/http"
"net/http/httptest"
"strings"
"testing"
)
func TestServerPostTransactions(t *testing.T) {
path := testLedgerFile(t)
ledger, err := NewLedger(path)
if err != nil {
t.Fatal(err)
}
server := Server{ledger: ledger}
r := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(`{
"Date": "2099-02-03",
"Description": "test",
"Payer": "payer",
"Payee": "payee",
"Amount": 1.02
}`))
w := httptest.NewRecorder()
server.postTransactions(w, r)
if w.Code != http.StatusOK {
t.Fatal(w.Code)
}
if s := strings.TrimSpace(string(w.Body.Bytes())); s != `{"ok":true}` {
t.Fatal(s)
}
transactions, err := ledger.Transactions()
if err != nil {
t.Fatal(err)
}
if transactions[len(transactions)-1] != (Transaction{
Date: "2099-02-03",
Description: "test",
Payer: "payer",
Payee: "payee",
Amount: 1.02,
}) {
t.Fatal(transactions[len(transactions)-1])
}
}