From b2be67e0529e4acb354cbc6c32720597f6f39c97 Mon Sep 17 00:00:00 2001 From: ValdiANS Date: Mon, 4 May 2026 11:54:19 +0700 Subject: [PATCH] fix: add sort_by and order_by query in master data kandang and kandang groups API --- .../controllers/kandang_group.controller.go | 2 ++ .../kandang-groups/services/kandang_group.service.go | 9 ++++++++- .../validations/kandang_group.validation.go | 2 ++ .../master/kandangs/controllers/kandang.controller.go | 2 ++ .../modules/master/kandangs/services/kandang.service.go | 9 ++++++++- .../master/kandangs/validations/kandang.validation.go | 2 ++ 6 files changed, 24 insertions(+), 2 deletions(-) diff --git a/internal/modules/master/kandang-groups/controllers/kandang_group.controller.go b/internal/modules/master/kandang-groups/controllers/kandang_group.controller.go index a7039f67..762713f8 100644 --- a/internal/modules/master/kandang-groups/controllers/kandang_group.controller.go +++ b/internal/modules/master/kandang-groups/controllers/kandang_group.controller.go @@ -29,6 +29,8 @@ func (u *KandangGroupController) GetAll(c *fiber.Ctx) error { Search: c.Query("search", ""), LocationId: c.QueryInt("location_id", 0), PicId: c.QueryInt("pic_id", 0), + OrderBy: c.Query("order_by", "desc"), + SortBy: c.Query("sort_by", "updated_at"), } if query.Page < 1 || query.Limit < 1 { diff --git a/internal/modules/master/kandang-groups/services/kandang_group.service.go b/internal/modules/master/kandang-groups/services/kandang_group.service.go index b569ca97..4293bfce 100644 --- a/internal/modules/master/kandang-groups/services/kandang_group.service.go +++ b/internal/modules/master/kandang-groups/services/kandang_group.service.go @@ -70,7 +70,14 @@ func (s kandangGroupService) GetAll(c *fiber.Ctx, params *validation.Query) ([]e if params.PicId != 0 { db = db.Where("kandang_groups.pic_id = ?", params.PicId) } - return db.Order("kandang_groups.created_at DESC").Order("kandang_groups.updated_at DESC") + + if params.OrderBy == "desc" || params.OrderBy == "" { + db = db.Order(fmt.Sprintf("kandang_groups.%s DESC", params.SortBy)) + } else { + db = db.Order(fmt.Sprintf("kandang_groups.%s ASC", params.SortBy)) + } + + return db }) if scopeErr != nil { diff --git a/internal/modules/master/kandang-groups/validations/kandang_group.validation.go b/internal/modules/master/kandang-groups/validations/kandang_group.validation.go index 9637ebe7..b1edd49a 100644 --- a/internal/modules/master/kandang-groups/validations/kandang_group.validation.go +++ b/internal/modules/master/kandang-groups/validations/kandang_group.validation.go @@ -20,4 +20,6 @@ type Query struct { Search string `query:"search" validate:"omitempty,max=50"` LocationId int `query:"location_id" validate:"omitempty,number,gt=0"` PicId int `query:"pic_id" validate:"omitempty,number,gt=0"` + SortBy string `query:"sort_by" validate:"omitempty,max=50,oneof=name created_at updated_at" default:"updated_at"` + OrderBy string `query:"order_by" validate:"omitempty,oneof=asc desc" default:"desc"` } diff --git a/internal/modules/master/kandangs/controllers/kandang.controller.go b/internal/modules/master/kandangs/controllers/kandang.controller.go index b1d016df..98f995b8 100644 --- a/internal/modules/master/kandangs/controllers/kandang.controller.go +++ b/internal/modules/master/kandangs/controllers/kandang.controller.go @@ -29,6 +29,8 @@ func (u *KandangController) GetAll(c *fiber.Ctx) error { Search: c.Query("search", ""), LocationId: c.QueryInt("location_id", 0), PicId: c.QueryInt("pic_id", 0), + OrderBy: c.Query("order_by", "desc"), + SortBy: c.Query("sort_by", "created_at"), } if query.Page < 1 || query.Limit < 1 { diff --git a/internal/modules/master/kandangs/services/kandang.service.go b/internal/modules/master/kandangs/services/kandang.service.go index fcb39011..27fbc8bb 100644 --- a/internal/modules/master/kandangs/services/kandang.service.go +++ b/internal/modules/master/kandangs/services/kandang.service.go @@ -66,7 +66,14 @@ func (s kandangService) GetAll(c *fiber.Ctx, params *validation.Query) ([]entity if params.PicId != 0 { db = db.Where("pic_id = ?", params.PicId) } - return db.Order("created_at DESC").Order("updated_at DESC") + + if params.OrderBy == "desc" || params.OrderBy == "" { + db = db.Order(fmt.Sprintf("%s DESC", params.SortBy)) + } else { + db = db.Order(fmt.Sprintf("%s ASC", params.SortBy)) + } + + return db }) if scopeErr != nil { diff --git a/internal/modules/master/kandangs/validations/kandang.validation.go b/internal/modules/master/kandangs/validations/kandang.validation.go index 9d5fe103..de82bf48 100644 --- a/internal/modules/master/kandangs/validations/kandang.validation.go +++ b/internal/modules/master/kandangs/validations/kandang.validation.go @@ -26,4 +26,6 @@ type Query struct { Search string `query:"search" validate:"omitempty,max=50"` LocationId int `query:"location_id" validate:"omitempty,number,gt=0"` PicId int `query:"pic_id" validate:"omitempty,number,gt=0"` + SortBy string `query:"sort_by" validate:"omitempty,max=50,oneof=name created_at updated_at" default:"updated_at"` + OrderBy string `query:"order_by" validate:"omitempty,oneof=asc desc" default:"desc"` }