From 94b5c4bbd3615d10244f1787f4464627f6156394 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Sun, 24 Apr 2022 20:03:53 +0000 Subject: [PATCH] Improve Backend --- postgres/queries/transactions.sql | 6 +++--- postgres/transactions.sql.go | 6 +++--- server/account.go | 22 +++++++++++++++++++--- server/http.go | 2 +- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/postgres/queries/transactions.sql b/postgres/queries/transactions.sql index 6e7b981..c80b906 100644 --- a/postgres/queries/transactions.sql +++ b/postgres/queries/transactions.sql @@ -66,7 +66,7 @@ AND accounts.budget_id = $1; -- name: GetFilteredTransactions :many SELECT transactions.* FROM display_transactions AS transactions -WHERE (@filter_category::boolean OR transactions.category_id = @category_id) -AND (@filter_account::boolean OR transactions.account_id = @account_id) -AND (@filter_payee::boolean OR transactions.payee_id = @payee_id) +WHERE (NOT @filter_category::boolean OR transactions.category_id = @category_id) +AND (NOT @filter_account::boolean OR transactions.account_id = @account_id) +AND (NOT @filter_payee::boolean OR transactions.payee_id = @payee_id) AND transactions.budget_id = @budget_id; \ No newline at end of file diff --git a/postgres/transactions.sql.go b/postgres/transactions.sql.go index 1792af1..70012b7 100644 --- a/postgres/transactions.sql.go +++ b/postgres/transactions.sql.go @@ -120,9 +120,9 @@ func (q *Queries) GetAllTransactionsForBudget(ctx context.Context, budgetID uuid const getFilteredTransactions = `-- name: GetFilteredTransactions :many SELECT transactions.id, transactions.date, transactions.memo, transactions.amount, transactions.group_id, transactions.status, transactions.account, transactions.payee_id, transactions.category_id, transactions.payee, transactions.category_group, transactions.category, transactions.transfer_account, transactions.budget_id, transactions.account_id FROM display_transactions AS transactions -WHERE ($1::boolean OR transactions.category_id = $2) -AND ($3::boolean OR transactions.account_id = $4) -AND ($5::boolean OR transactions.payee_id = $6) +WHERE (NOT $1::boolean OR transactions.category_id = $2) +AND (NOT $3::boolean OR transactions.account_id = $4) +AND (NOT $5::boolean OR transactions.payee_id = $6) AND transactions.budget_id = $7 ` diff --git a/server/account.go b/server/account.go index 9c81a76..5c29756 100644 --- a/server/account.go +++ b/server/account.go @@ -30,10 +30,13 @@ func (h *Handler) filteredTransactions(c *gin.Context) { } params := postgres.GetFilteredTransactionsParams{ - BudgetID: budgetUUID, - CategoryID: uuid.NullUUID{}, - FilterCategory: true, + BudgetID: budgetUUID, } + params.CategoryID, params.FilterCategory = parseEmptyUUID(request.CategoryID) + accountID, filterAccount := parseEmptyUUID(request.AccountID) + params.AccountID, params.FilterAccount = accountID.UUID, filterAccount + params.PayeeID, params.FilterPayee = parseEmptyUUID(request.PayeeID) + transactions, err := h.Service.GetFilteredTransactions(c.Request.Context(), params) if err != nil { c.AbortWithError(http.StatusInternalServerError, err) @@ -43,6 +46,19 @@ func (h *Handler) filteredTransactions(c *gin.Context) { c.JSON(http.StatusOK, TransactionsResponse{nil, transactions}) } +func parseEmptyUUID(value string) (uuid.NullUUID, bool) { + if value == "" { + return uuid.NullUUID{}, false + } + + val, err := uuid.Parse(value) + if err != nil { + return uuid.NullUUID{}, false + } + + return uuid.NullUUID{val, true}, true +} + func (h *Handler) problematicTransactions(c *gin.Context) { budgetID := c.Param("budgetid") budgetUUID, err := uuid.Parse(budgetID) diff --git a/server/http.go b/server/http.go index 67e51ba..34bcf0a 100644 --- a/server/http.go +++ b/server/http.go @@ -68,7 +68,7 @@ func (h *Handler) LoadRoutes(router *gin.Engine) { budget.GET("/:budgetid/autocomplete/accounts", h.autocompleteAccounts) budget.GET("/:budgetid/autocomplete/categories", h.autocompleteCategories) budget.GET("/:budgetid/problematic-transactions", h.problematicTransactions) - budget.GET("/:budgetid/filtered-transactions", h.filteredTransactions) + budget.POST("/:budgetid/filtered-transactions", h.filteredTransactions) budget.DELETE("/:budgetid", h.deleteBudget) budget.POST("/:budgetid/import/ynab", h.importYNAB) budget.POST("/:budgetid/export/ynab/transactions", h.exportYNABTransactions)