Skip to content

Commit a4cbb48

Browse files
committed
feat: treat budget name and note filter parameters like "contains"
1 parent a60e1db commit a4cbb48

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

pkg/controllers/budget.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/gin-gonic/gin"
1212
"github.com/google/uuid"
1313
"github.com/shopspring/decimal"
14+
"golang.org/x/exp/slices"
1415
)
1516

1617
type BudgetListResponse struct {
@@ -42,8 +43,8 @@ type BudgetMonthResponse struct {
4243
}
4344

4445
type BudgetQueryFilter struct {
45-
Name string `form:"name"`
46-
Note string `form:"note"`
46+
Name string `form:"name" filterField:"false"`
47+
Note string `form:"note" filterField:"false"`
4748
Currency string `form:"currency"`
4849
}
4950

@@ -237,17 +238,31 @@ func (co Controller) GetBudgets(c *gin.Context) {
237238
_ = c.Bind(&filter)
238239

239240
// Get the fields that we're filtering for
240-
queryFields, _ := httputil.GetURLFields(c.Request.URL, filter)
241+
queryFields, setFields := httputil.GetURLFields(c.Request.URL, filter)
241242

242243
var budgets []models.Budget
243244

244-
if !queryWithRetry(c, co.DB.Where(&models.Budget{
245+
query := co.DB.Where(&models.Budget{
245246
BudgetCreate: models.BudgetCreate{
246247
Name: filter.Name,
247248
Note: filter.Note,
248249
Currency: filter.Currency,
249250
},
250-
}, queryFields...).Find(&budgets)) {
251+
}, queryFields...)
252+
253+
if filter.Name != "" {
254+
query = query.Where("name LIKE ?", fmt.Sprintf("%%%s%%", filter.Name))
255+
} else if slices.Contains(setFields, "Name") {
256+
query = query.Where("name = ''")
257+
}
258+
259+
if filter.Note != "" {
260+
query = query.Where("note LIKE ?", fmt.Sprintf("%%%s%%", filter.Note))
261+
} else if slices.Contains(setFields, "Note") {
262+
query = query.Where("note = ''")
263+
}
264+
265+
if !queryWithRetry(c, query.Find(&budgets)) {
251266
return
252267
}
253268

pkg/controllers/budget_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func (suite *TestSuiteStandard) TestGetBudgetsFilter() {
134134
r := test.Request(suite.controller, suite.T(), http.MethodGet, fmt.Sprintf("http://example.com/v1/budgets?%s", tt.query), "")
135135
suite.assertHTTPStatus(&r, http.StatusOK)
136136
suite.decodeResponse(&r, &re)
137-
assert.Equal(suite.T(), tt.len, len(re.Data))
137+
assert.Equal(t, tt.len, len(re.Data))
138138
})
139139
}
140140
}

0 commit comments

Comments
 (0)