Skip to content

Commit 3cd6241

Browse files
authored
feat(pc): add duplicated phase key error (#3231)
1 parent fc7a763 commit 3cd6241

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

openmeter/productcatalog/errors.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,15 @@ var ErrPlanPhaseDurationLessThenAnHour = models.NewValidationIssue(
454454
models.WithWarningSeverity(),
455455
)
456456

457+
const ErrCodePlanPhaseDuplicatedKey models.ErrorCode = "plan_phase_duplicated_key"
458+
459+
var ErrPlanPhaseDuplicatedKey = models.NewValidationIssue(
460+
ErrCodePlanPhaseDuplicatedKey,
461+
"duplicated key",
462+
models.WithFieldString("key"),
463+
models.WithCriticalSeverity(),
464+
)
465+
457466
const ErrCodePlanInvalidStatus models.ErrorCode = "plan_invalid_status"
458467

459468
var ErrPlanInvalidStatus = models.NewValidationIssue(

openmeter/productcatalog/plan.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ func ValidatePlanPhases() models.ValidatorFunc[Plan] {
6868
return ErrPlanWithNoPhases
6969
}
7070

71+
phaseKeys := make(map[string]struct{}, len(p.Phases))
72+
7173
lastPhaseIdx := len(p.Phases) - 1
7274

7375
for idx, phase := range p.Phases {
@@ -88,6 +90,20 @@ func ValidatePlanPhases() models.ValidatorFunc[Plan] {
8890
}
8991
}
9092

93+
// Check for duplicated phase keys
94+
if _, ok := phaseKeys[phase.Key]; ok {
95+
selector := models.NewFieldSelectors(
96+
models.NewFieldSelector("phases").
97+
WithExpression(
98+
models.NewFieldAttrValue("key", phase.Key),
99+
),
100+
models.NewFieldSelector("key"),
101+
)
102+
103+
errs = append(errs, models.ErrorWithFieldPrefix(selector, ErrPlanPhaseDuplicatedKey))
104+
}
105+
phaseKeys[phase.Key] = struct{}{}
106+
91107
if err := phase.Validate(); err != nil {
92108
errs = append(errs, models.ErrorWithFieldPrefix(phaseFieldSelector, err))
93109
}

0 commit comments

Comments
 (0)