diff --git a/internal/modules/master/phase-activities/controllers/phase-activity.controller.go b/internal/modules/master/phase-activities/controllers/phase-activity.controller.go index 455ff1e4..3cbc68f2 100644 --- a/internal/modules/master/phase-activities/controllers/phase-activity.controller.go +++ b/internal/modules/master/phase-activities/controllers/phase-activity.controller.go @@ -28,20 +28,12 @@ func (u *PhaseActivityController) GetAll(c *fiber.Ctx) error { Limit: c.QueryInt("limit", 10), Search: c.Query("search", ""), } + query.PhaseIDs = c.Query("phase_ids", "") if query.Page < 1 || query.Limit < 1 { return fiber.NewError(fiber.StatusBadRequest, "page and limit must be greater than 0") } - if phaseParam := c.Query("phase_id", ""); phaseParam != "" { - id, err := strconv.Atoi(phaseParam) - if err != nil || id <= 0 { - return fiber.NewError(fiber.StatusBadRequest, "invalid phase_id") - } - temp := uint(id) - query.PhaseId = &temp - } - result, totalResults, err := u.PhaseActivityService.GetAll(c, query) if err != nil { return err diff --git a/internal/modules/master/phase-activities/services/phase-activity.service.go b/internal/modules/master/phase-activities/services/phase-activity.service.go index 3cedb4fc..24b8272e 100644 --- a/internal/modules/master/phase-activities/services/phase-activity.service.go +++ b/internal/modules/master/phase-activities/services/phase-activity.service.go @@ -2,6 +2,7 @@ package service import ( "errors" + "strconv" "strings" entity "gitlab.com/mbugroup/lti-api.git/internal/entities" @@ -57,8 +58,11 @@ func (s phaseActivityService) GetAll(c *fiber.Ctx, params *validation.Query) ([] if params.Search != "" { db = db.Where("name LIKE ?", "%"+params.Search+"%") } - if params.PhaseId != nil { - db = db.Where("phase_id = ?", *params.PhaseId) + if params.PhaseIDs != "" { + ids := parseIDs(params.PhaseIDs) + if len(ids) > 0 { + db = db.Where("phase_id IN ?", ids) + } } return db.Order("created_at DESC").Order("updated_at DESC") }) @@ -166,3 +170,18 @@ func (s phaseActivityService) DeleteOne(c *fiber.Ctx, id uint) error { } return nil } + +func parseIDs(raw string) []uint { + parts := strings.Split(raw, ",") + results := make([]uint, 0, len(parts)) + for _, part := range parts { + value := strings.TrimSpace(part) + if value == "" { + continue + } + if n, err := strconv.ParseUint(value, 10, 64); err == nil { + results = append(results, uint(n)) + } + } + return results +} diff --git a/internal/modules/master/phase-activities/validations/phase-activity.validation.go b/internal/modules/master/phase-activities/validations/phase-activity.validation.go index a2ab8e1b..54186315 100644 --- a/internal/modules/master/phase-activities/validations/phase-activity.validation.go +++ b/internal/modules/master/phase-activities/validations/phase-activity.validation.go @@ -14,8 +14,8 @@ type Update struct { } type Query struct { - Page int `query:"page" validate:"omitempty,number,min=1,gt=0"` - Limit int `query:"limit" validate:"omitempty,number,min=1,max=100,gt=0"` - Search string `query:"search" validate:"omitempty,max=50"` - PhaseId *uint `query:"phase_id" validate:"omitempty"` + Page int `query:"page" validate:"omitempty,number,min=1,gt=0"` + Limit int `query:"limit" validate:"omitempty,number,min=1,max=100,gt=0"` + Search string `query:"search" validate:"omitempty,max=50"` + PhaseIDs string `query:"phase_ids" validate:"omitempty"` }