add post transactions endpoint
This commit is contained in:
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"`
|
||||||
|
|||||||
48
server_test.go
Normal file
48
server_test.go
Normal 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])
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user