From 8ad923a90ac78585d4a89114001507f7db68ebe4 Mon Sep 17 00:00:00 2001 From: ragilap Date: Mon, 9 Feb 2026 16:48:42 +0700 Subject: [PATCH] [FEAT/BE] Add saparator type search get all productwarehouse --- .../services/product_warehouse.service.go | 54 ++++++++++++++----- .../product_warehouse.validation.go | 2 +- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/internal/modules/inventory/product-warehouses/services/product_warehouse.service.go b/internal/modules/inventory/product-warehouses/services/product_warehouse.service.go index 7132644e..188c4506 100644 --- a/internal/modules/inventory/product-warehouses/services/product_warehouse.service.go +++ b/internal/modules/inventory/product-warehouses/services/product_warehouse.service.go @@ -100,9 +100,13 @@ func (s productWarehouseService) GetAll(c *fiber.Ctx, params *validation.Query) offset := (params.Page - 1) * params.Limit + var marketingTypes []string if params.Type != "" { - if !utils.IsValidMarketingType(params.Type) { - return nil, 0, fiber.NewError(fiber.StatusBadRequest, "Invalid marketing type") + marketingTypes = utils.ParseQueryArray(params.Type) + for _, t := range marketingTypes { + if !utils.IsValidMarketingType(t) { + return nil, 0, fiber.NewError(fiber.StatusBadRequest, "Invalid marketing type") + } } } @@ -135,16 +139,42 @@ func (s productWarehouseService) GetAll(c *fiber.Ctx, params *validation.Query) db = db.Where("warehouse_id = ?", params.WarehouseId) } - if params.Type != "" { - switch params.Type { - case string(utils.MarketingTypeAyamPullet): - db = s.Repository.ApplyFlagsFilter(db, []string{string(utils.FlagDOC), string(utils.FlagPullet), string(utils.FlagLayer)}) - case string(utils.MarketingTypeAyam): - db = s.Repository.ApplyFlagsFilter(db, []string{string(utils.FlagAyamAfkir), string(utils.FlagAyamCulling), string(utils.FlagAyamMati)}) - case string(utils.MarketingTypeTelur): - db = s.Repository.ApplyFlagsFilter(db, []string{string(utils.FlagTelur), string(utils.FlagTelurUtuh), string(utils.FlagTelurPecah), string(utils.FlagTelurPutih), string(utils.FlagTelurRetak)}) - case string(utils.MarketingTypeTrading): - db = s.Repository.ApplyFlagsFilter(db, []string{string(utils.FlagPakan), string(utils.FlagPreStarter), string(utils.FlagStarter), string(utils.FlagFinisher), string(utils.FlagOVK), string(utils.FlagObat), string(utils.FlagVitamin), string(utils.FlagKimia), string(utils.FlagEkspedisi)}) + if len(marketingTypes) > 0 { + flagSet := make(map[string]struct{}) + for _, t := range marketingTypes { + switch t { + case string(utils.MarketingTypeAyamPullet): + flagSet[string(utils.FlagDOC)] = struct{}{} + flagSet[string(utils.FlagPullet)] = struct{}{} + flagSet[string(utils.FlagLayer)] = struct{}{} + case string(utils.MarketingTypeAyam): + flagSet[string(utils.FlagAyamAfkir)] = struct{}{} + flagSet[string(utils.FlagAyamCulling)] = struct{}{} + flagSet[string(utils.FlagAyamMati)] = struct{}{} + case string(utils.MarketingTypeTelur): + flagSet[string(utils.FlagTelur)] = struct{}{} + flagSet[string(utils.FlagTelurUtuh)] = struct{}{} + flagSet[string(utils.FlagTelurPecah)] = struct{}{} + flagSet[string(utils.FlagTelurPutih)] = struct{}{} + flagSet[string(utils.FlagTelurRetak)] = struct{}{} + case string(utils.MarketingTypeTrading): + flagSet[string(utils.FlagPakan)] = struct{}{} + flagSet[string(utils.FlagPreStarter)] = struct{}{} + flagSet[string(utils.FlagStarter)] = struct{}{} + flagSet[string(utils.FlagFinisher)] = struct{}{} + flagSet[string(utils.FlagOVK)] = struct{}{} + flagSet[string(utils.FlagObat)] = struct{}{} + flagSet[string(utils.FlagVitamin)] = struct{}{} + flagSet[string(utils.FlagKimia)] = struct{}{} + flagSet[string(utils.FlagEkspedisi)] = struct{}{} + } + } + if len(flagSet) > 0 { + flags := make([]string, 0, len(flagSet)) + for f := range flagSet { + flags = append(flags, f) + } + db = s.Repository.ApplyFlagsFilter(db, flags) } } diff --git a/internal/modules/inventory/product-warehouses/validations/product_warehouse.validation.go b/internal/modules/inventory/product-warehouses/validations/product_warehouse.validation.go index 7e7da7a6..5d1f4e0a 100644 --- a/internal/modules/inventory/product-warehouses/validations/product_warehouse.validation.go +++ b/internal/modules/inventory/product-warehouses/validations/product_warehouse.validation.go @@ -20,5 +20,5 @@ type Query struct { Flags string `query:"flags" validate:"omitempty"` KandangId uint `query:"kandang_id" validate:"omitempty,number,min=1"` TransferContext string `query:"transfer_context" validate:"omitempty,oneof=inventory_transfer"` - Type string `query:"type" validate:"omitempty,oneof=AYAM TELUR TRADING AYAM_PULLET"` + Type string `query:"type" validate:"omitempty"` }