add post transactions endpoint
parent
03ec3247f9
commit
1345071f0a
26
server.go
26
server.go
|
|
@ -22,6 +22,8 @@ func (server Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
switch r.Method + r.URL.Path {
|
switch r.Method + r.URL.Path {
|
||||||
case "GET/api/transactions":
|
case "GET/api/transactions":
|
||||||
server.getTransactions(w, r)
|
server.getTransactions(w, r)
|
||||||
|
case "POST/api/transactions":
|
||||||
|
server.postTransactions(w, r)
|
||||||
case "PUT/api/transactions":
|
case "PUT/api/transactions":
|
||||||
server.putTransactions(w, r)
|
server.putTransactions(w, r)
|
||||||
case "GET/api/balances":
|
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})
|
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) {
|
func (server Server) putTransactions(w http.ResponseWriter, r *http.Request) {
|
||||||
var request struct {
|
var request struct {
|
||||||
IDX int `json:"idx"`
|
IDX int `json:"idx"`
|
||||||
|
|
|
||||||
|
|
@ -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])
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue