From 9dad1dabbde5295fa0acda6d6af4f4ed46b7a231 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Mon, 7 Feb 2022 16:17:14 +0000 Subject: [PATCH] Implement new transaction --- http/json-date.go | 30 +++++++++++ http/transaction.go | 105 ++++++++++++++------------------------ web/src/pages/Account.vue | 4 +- 3 files changed, 71 insertions(+), 68 deletions(-) create mode 100644 http/json-date.go diff --git a/http/json-date.go b/http/json-date.go new file mode 100644 index 0000000..d9e0180 --- /dev/null +++ b/http/json-date.go @@ -0,0 +1,30 @@ +package http + +import ( + "encoding/json" + "strings" + "time" +) + +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) +} diff --git a/http/transaction.go b/http/transaction.go index 41cf67c..a565275 100644 --- a/http/transaction.go +++ b/http/transaction.go @@ -1,10 +1,8 @@ package http import ( - "encoding/json" "fmt" "net/http" - "strings" "time" "git.javil.eu/jacob1123/budgeteer/postgres" @@ -22,32 +20,11 @@ type NewTransactionPayload 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) + Memo string `json:"memo"` + Amount string `json:"amount"` + BudgetID uuid.UUID `json:"budget_id"` + AccountID uuid.UUID `json:"account_id"` + State string `json:"state"` } func (h *Handler) newTransaction(c *gin.Context) { @@ -59,25 +36,45 @@ func (h *Handler) newTransaction(c *gin.Context) { } fmt.Printf("%v\n", payload) - return - - transactionAccountID, err := getUUID(c, "account_id") - if err != nil { - c.AbortWithError(http.StatusNotAcceptable, fmt.Errorf("account_id: %w", err)) - return - } amount := postgres.Numeric{} amount.Set(payload.Amount) - transactionUUID, err := getNullUUIDFromParam(c, "transactionid") + /*transactionUUID, err := getNullUUIDFromParam(c, "transactionid") if err != nil { c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("parse transaction id: %w", err)) return + }*/ + + //if !transactionUUID.Valid { + new := postgres.CreateTransactionParams{ + Memo: payload.Memo, + Date: time.Time(payload.Date), + Amount: amount, + AccountID: payload.AccountID, + PayeeID: payload.Payee.ID, //TODO handle new payee + CategoryID: payload.Category.ID, //TODO handle new category + Status: postgres.TransactionStatus(payload.State), + } + _, err = h.Service.CreateTransaction(c.Request.Context(), new) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("create transaction: %w", err)) } - if !transactionUUID.Valid { - new := postgres.CreateTransactionParams{ + return + // } + /* + _, delete := c.GetPostForm("delete") + if delete { + err = h.Service.DeleteTransaction(c.Request.Context(), transactionUUID.UUID) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("delete transaction: %w", err)) + } + return + } + + update := postgres.UpdateTransactionParams{ + ID: transactionUUID.UUID, Memo: payload.Memo, Date: time.Time(payload.Date), Amount: amount, @@ -85,34 +82,8 @@ func (h *Handler) newTransaction(c *gin.Context) { PayeeID: payload.Payee.ID, //TODO handle new payee CategoryID: payload.Category.ID, //TODO handle new category } - _, err = h.Service.CreateTransaction(c.Request.Context(), new) + err = h.Service.UpdateTransaction(c.Request.Context(), update) if err != nil { - c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("create transaction: %w", err)) - } - - return - } - - _, delete := c.GetPostForm("delete") - if delete { - err = h.Service.DeleteTransaction(c.Request.Context(), transactionUUID.UUID) - if err != nil { - c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("delete transaction: %w", err)) - } - return - } - - update := postgres.UpdateTransactionParams{ - ID: transactionUUID.UUID, - Memo: payload.Memo, - Date: time.Time(payload.Date), - Amount: amount, - AccountID: transactionAccountID, - PayeeID: payload.Payee.ID, //TODO handle new payee - CategoryID: payload.Category.ID, //TODO handle new category - } - err = h.Service.UpdateTransaction(c.Request.Context(), update) - if err != nil { - c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("update transaction: %w", err)) - } + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("update transaction: %w", err)) + }*/ } diff --git a/web/src/pages/Account.vue b/web/src/pages/Account.vue index 91f5e2b..508afcd 100644 --- a/web/src/pages/Account.vue +++ b/web/src/pages/Account.vue @@ -21,11 +21,13 @@ export default defineComponent({ method: "POST", body: JSON.stringify({ budget_id: this.budgetid, + account_id: this.accountid, date: this.$data.TransactionDate, payee: this.$data.Payee, category: this.$data.Category, memo: this.$data.Memo, - amount: this.$data.Amount + amount: this.$data.Amount, + state: "Uncleared" }), headers: this.$store.getters.AuthHeaders, })