99 "github.com/envelope-zero/backend/pkg/models"
1010 "github.com/gin-gonic/gin"
1111 "github.com/google/uuid"
12+ "golang.org/x/exp/slices"
1213)
1314
1415type CategoryListResponse struct {
@@ -31,9 +32,9 @@ type CategoryLinks struct {
3132}
3233
3334type CategoryQueryFilter struct {
34- Name string `form:"name"`
35+ Name string `form:"name" filterField:"false" `
3536 BudgetID string `form:"budget"`
36- Note string `form:"note"`
37+ Note string `form:"note" filterField:"false" `
3738}
3839
3940func (f CategoryQueryFilter ) ToCreate (c * gin.Context ) (models.CategoryCreate , bool ) {
@@ -43,9 +44,7 @@ func (f CategoryQueryFilter) ToCreate(c *gin.Context) (models.CategoryCreate, bo
4344 }
4445
4546 return models.CategoryCreate {
46- Name : f .Name ,
4747 BudgetID : budgetID ,
48- Note : f .Note ,
4948 }, true
5049}
5150
@@ -159,18 +158,32 @@ func (co Controller) GetCategories(c *gin.Context) {
159158 _ = c .Bind (& filter )
160159
161160 // Get the fields that we are filtering for
162- queryFields , _ := httputil .GetURLFields (c .Request .URL , filter )
161+ queryFields , setFields := httputil .GetURLFields (c .Request .URL , filter )
163162
164163 // Convert the QueryFilter to a Create struct
165164 create , ok := filter .ToCreate (c )
166165 if ! ok {
167166 return
168167 }
169168
170- var categories []models.Category
171- if ! queryWithRetry (c , co .DB .Where (& models.Category {
169+ query := co .DB .Where (& models.Category {
172170 CategoryCreate : create ,
173- }, queryFields ... ).Find (& categories )) {
171+ }, queryFields ... )
172+
173+ if filter .Name != "" {
174+ query = query .Where ("name LIKE ?" , fmt .Sprintf ("%%%s%%" , filter .Name ))
175+ } else if slices .Contains (setFields , "Name" ) {
176+ query = query .Where ("name = ''" )
177+ }
178+
179+ if filter .Note != "" {
180+ query = query .Where ("note LIKE ?" , fmt .Sprintf ("%%%s%%" , filter .Note ))
181+ } else if slices .Contains (setFields , "Note" ) {
182+ query = query .Where ("note = ''" )
183+ }
184+
185+ var categories []models.Category
186+ if ! queryWithRetry (c , query .Find (& categories )) {
174187 return
175188 }
176189
0 commit comments