@@ -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
1617type BudgetListResponse struct {
@@ -42,8 +43,8 @@ type BudgetMonthResponse struct {
4243}
4344
4445type 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
0 commit comments