diff --git a/http/transaction.go b/http/transaction.go index 01417c0..12b2553 100644 --- a/http/transaction.go +++ b/http/transaction.go @@ -1,15 +1,67 @@ package http import ( + "encoding/json" "fmt" "net/http" + "strings" "time" "git.javil.eu/jacob1123/budgeteer/postgres" "github.com/gin-gonic/gin" + "github.com/google/uuid" ) +type NewTransactionPayload struct { + Date JSONDate `json:"date"` + Payee struct { + ID uuid.NullUUID + Name string + } `json:"payee"` + Category struct { + ID uuid.NullUUID + Name string + } `json:"category"` + Memo string `json:"memo"` + Amount string `json:"amount"` + BudgetID uuid.UUID `json:"budget_id"` +} + +type JSONDate time.Time + +// Implement Marshaler and Unmarshaler interface +func (j *JSONDate) UnmarshalJSON(b []byte) error { + s := strings.Trim(string(b), "\"") + t, err := time.Parse("2006-01-02", s) + if err != nil { + return err + } + *j = JSONDate(t) + return nil +} + +func (j JSONDate) MarshalJSON() ([]byte, error) { + return json.Marshal(time.Time(j)) +} + +// Maybe a Format function for printing your date +func (j JSONDate) Format(s string) string { + t := time.Time(j) + return t.Format(s) +} + func (h *Handler) newTransaction(c *gin.Context) { + var payload NewTransactionPayload + err := c.BindJSON(&payload) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, err) + return + } + + fmt.Printf("%v\n", payload) + /* c.JSON(http.StatusOK, payload)*/ + return + transactionMemo, _ := c.GetPostForm("memo") transactionAccountID, err := getUUID(c, "account_id") if err != nil {