diff --git a/cmd/xchg/add.go b/cmd/xchg/add.go new file mode 100644 index 0000000..2083ba9 --- /dev/null +++ b/cmd/xchg/add.go @@ -0,0 +1,40 @@ +package main + +import ( + "encoding/json" + "fmt" + "net/http" + "strings" + + "git.ronmi.tw/ronmi/sdm" + "github.com/Patrolavia/jsonapi" +) + +type add struct { + M *sdm.Manager +} + +func (h *add) Handle(enc *json.Encoder, dec *json.Decoder, httpData *jsonapi.HTTP) { + var param Order + if err := dec.Decode(¶m); err != nil { + httpData.WriteHeader(http.StatusBadRequest) + enc.Encode("Parameter is not Order object") + return + } + + // validating data + param.Code = strings.ToUpper(strings.TrimSpace(param.Code)) + if len(param.Code) != 3 || param.Local == 0 || param.Foreign == 0 || param.Time <= 0 { + httpData.WriteHeader(http.StatusBadRequest) + enc.Encode("Parameter is not Order object") + return + } + + if _, err := h.M.Insert("orders", param); err != nil { + httpData.WriteHeader(http.StatusInternalServerError) + enc.Encode(fmt.Sprintf("Error saving order: %s", err)) + return + } + + enc.Encode(nil) +} diff --git a/cmd/xchg/add_test.go b/cmd/xchg/add_test.go index 14397ca..56e546f 100644 --- a/cmd/xchg/add_test.go +++ b/cmd/xchg/add_test.go @@ -1,17 +1,27 @@ package main import ( + "database/sql" "net/http" "strings" "testing" + "git.ronmi.tw/ronmi/sdm" + "github.com/Patrolavia/jsonapi" ) func TestAddOK(t *testing.T) { - h := &add{mgr} + db, err := sql.Open("sqlite3", ":memory:") + if err != nil { + t.Fatalf("Cannot connect to another db: %s", err) + } + initTable(db) + defer db.Close() + + h := &add{sdm.New(db)} - resp, err := jsonapi.HandlerTest(h.Handle).Post("/api/add", "", `{"when":1468248043,"foreign":100,"local":-100,"code":"USD"}`) + resp, err := jsonapi.HandlerTest(h.Handle).Post("/api/add", "", `{"when":1468248043,"foreign":100,"local":-100,"code":"AUD"}`) if err != nil { t.Fatalf("unexpected error occured when testing add: %s", err)