From 4b9e86427d253ef7f61d83d1f6798926ac0cb184 Mon Sep 17 00:00:00 2001 From: ValdiANS Date: Tue, 2 Jun 2026 13:19:52 +0700 Subject: [PATCH] feat: add date range filter to marketing list API Added start_date, end_date, and filter_by query parameters to the GET /api/marketing/ endpoint. Users can now filter marketing records by a date range using either so_date (Sales Order date, default) or created_at as the target column. Changes: - validation: added StartDate, EndDate (YYYY-MM-DD format), and FilterBy (oneof: so_date, created_at) to DeliveryOrderQuery struct - controller: parse the three new query params in GetAll handler - service: apply >=start / --- .../controllers/deliveryorder.controller.go | 3 +++ .../marketing/services/deliveryorder.service.go | 15 +++++++++++++++ .../validations/deliveryorder.validation.go | 3 +++ 3 files changed, 21 insertions(+) diff --git a/internal/modules/marketing/controllers/deliveryorder.controller.go b/internal/modules/marketing/controllers/deliveryorder.controller.go index 208d8b48..1b1b1d41 100644 --- a/internal/modules/marketing/controllers/deliveryorder.controller.go +++ b/internal/modules/marketing/controllers/deliveryorder.controller.go @@ -75,6 +75,9 @@ func (u *DeliveryOrdersController) GetAll(c *fiber.Ctx) error { WarehouseID: uint(c.QueryInt("warehouse_id", 0)), SortBy: sortBy, SortOrder: sortOrder, + StartDate: strings.TrimSpace(c.Query("start_date", "")), + EndDate: strings.TrimSpace(c.Query("end_date", "")), + FilterBy: strings.TrimSpace(c.Query("filter_by", "")), } if isAllExcelExportRequest(c) { diff --git a/internal/modules/marketing/services/deliveryorder.service.go b/internal/modules/marketing/services/deliveryorder.service.go index d442f457..7665a1d8 100644 --- a/internal/modules/marketing/services/deliveryorder.service.go +++ b/internal/modules/marketing/services/deliveryorder.service.go @@ -321,6 +321,21 @@ func (s deliveryOrdersService) GetAll(c *fiber.Ctx, params *validation.DeliveryO return db.Where("id = ?", params.MarketingId) } + dateStart, dateEnd, dateErr := utils.ParseDateRangeForQuery(params.StartDate, params.EndDate) + if dateErr != nil { + return db.Where("1 = 0") + } + dateCol := "marketings.so_date" + if strings.TrimSpace(params.FilterBy) == "created_at" { + dateCol = "marketings.created_at" + } + if dateStart != nil { + db = db.Where(dateCol+" >= ?", *dateStart) + } + if dateEnd != nil { + db = db.Where(dateCol+" < ?", *dateEnd) + } + orderDir := "DESC" if params.SortOrder != "" { orderDir = strings.ToUpper(params.SortOrder) diff --git a/internal/modules/marketing/validations/deliveryorder.validation.go b/internal/modules/marketing/validations/deliveryorder.validation.go index c602de54..3504eb7b 100644 --- a/internal/modules/marketing/validations/deliveryorder.validation.go +++ b/internal/modules/marketing/validations/deliveryorder.validation.go @@ -34,6 +34,9 @@ type DeliveryOrderQuery struct { WarehouseID uint `query:"warehouse_id" validate:"omitempty,gt=0"` SortBy string `query:"sort_by" validate:"omitempty,oneof=so_number so_date status customer grand_total created_at"` SortOrder string `query:"sort_order" validate:"omitempty,oneof=asc desc"` + StartDate string `query:"start_date" validate:"omitempty,datetime=2006-01-02"` + EndDate string `query:"end_date" validate:"omitempty,datetime=2006-01-02"` + FilterBy string `query:"filter_by" validate:"omitempty,oneof=so_date created_at"` } type DeliveryOrderApprove struct {