Skip to content

Commit 8eb5fe6

Browse files
committed
[scd] Factorize volume4D union from rest
1 parent cc87c13 commit 8eb5fe6

File tree

3 files changed

+24
-26
lines changed

3 files changed

+24
-26
lines changed

pkg/models/scd_conversions.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,24 @@ func Volume4DFromSCDRest(vol4 *restapi.Volume4D, validators ...Volume4DValidator
7777
return volume, nil
7878
}
7979

80+
// UnionVolume4DFromSCDRest converts a slice of vol4 SCD v1 REST model to a single bounding Volume4D
81+
func UnionVolume4DFromSCDRest(vol4s []restapi.Volume4D, validators ...Volume4DValidator) (*Volume4D, error) {
82+
volumes := make([]*Volume4D, len(vol4s))
83+
for idx, vol4 := range vol4s {
84+
volume, err := Volume4DFromSCDRest(&vol4, validators...)
85+
if err != nil {
86+
return nil, stacktrace.Propagate(err, "Failed to parse volume %d", idx)
87+
}
88+
volumes[idx] = volume
89+
}
90+
union, err := UnionVolumes4D(volumes...)
91+
if err != nil {
92+
return nil, stacktrace.Propagate(err, "Failed to union volumes")
93+
}
94+
95+
return union, nil
96+
}
97+
8098
// Volume3DFromSCDRest converts a vol3 SCD v1 REST model to a Volume3D
8199
func Volume3DFromSCDRest(vol3 *restapi.Volume3D) (*Volume3D, error) {
82100
if vol3 == nil {

pkg/scd/constraints_handler.go

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,6 @@ func (a *Server) PutConstraintReference(ctx context.Context, manager string, ent
362362

363363
type validConstraintParams struct {
364364
id dssmodels.ID
365-
extents []*dssmodels.Volume4D
366365
uExtent *dssmodels.Volume4D
367366
cells s2.CellUnion
368367
ussBaseURL string
@@ -414,19 +413,10 @@ func validateAndReturnConstraintUpsertParams(
414413
}
415414
}
416415

417-
// TODO: factor out logic below into common multi-vol4d parser and reuse with PutOperationReference
418-
valid.extents = make([]*dssmodels.Volume4D, len(params.Extents))
419-
for idx, extent := range params.Extents {
420-
// Start and end times are required for each volume
421-
cExtent, err := dssmodels.Volume4DFromSCDRest(&extent, dssmodels.WithRequireTimeBounds())
422-
if err != nil {
423-
return nil, stacktrace.Propagate(err, "Failed to parse extent %d", idx)
424-
}
425-
valid.extents[idx] = cExtent
426-
}
427-
valid.uExtent, err = dssmodels.UnionVolumes4D(valid.extents...)
416+
// Start and end times are required for each volume
417+
valid.uExtent, err = dssmodels.UnionVolume4DFromSCDRest(params.Extents, dssmodels.WithRequireTimeBounds())
428418
if err != nil {
429-
return nil, stacktrace.Propagate(err, "Failed to union extents")
419+
return nil, stacktrace.Propagate(err, "Invalid extents")
430420
}
431421

432422
if now.After(*valid.uExtent.EndTime) {

pkg/scd/operational_intents_handler.go

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,6 @@ type validOIRParams struct {
393393
ovn scdmodels.OVN
394394
newOVN scdmodels.OVN
395395
state scdmodels.OperationalIntentState
396-
extents []*dssmodels.Volume4D
397396
uExtent *dssmodels.Volume4D
398397
cells s2.CellUnion
399398
subscriptionID dssmodels.ID
@@ -503,19 +502,10 @@ func validateAndReturnOIRUpsertParams(
503502
return nil, stacktrace.NewError("Invalid OperationalIntent state: %s", params.State)
504503
}
505504

506-
valid.extents = make([]*dssmodels.Volume4D, len(params.Extents))
507-
for idx, extent := range params.Extents {
508-
// Start and end times, as well as lower and upper altitudes, are required for each volume
509-
cExtent, err := dssmodels.Volume4DFromSCDRest(&extent, dssmodels.WithRequireTimeBounds(), dssmodels.WithRequireAltitudeBounds())
510-
if err != nil {
511-
return nil, stacktrace.Propagate(err, "Failed to parse extent %d", idx)
512-
}
513-
valid.extents[idx] = cExtent
514-
}
515-
516-
valid.uExtent, err = dssmodels.UnionVolumes4D(valid.extents...)
505+
// Start and end times, as well as lower and upper altitudes, are required for each volume
506+
valid.uExtent, err = dssmodels.UnionVolume4DFromSCDRest(params.Extents, dssmodels.WithRequireTimeBounds(), dssmodels.WithRequireAltitudeBounds())
517507
if err != nil {
518-
return nil, stacktrace.Propagate(err, "Failed to union extents")
508+
return nil, stacktrace.Propagate(err, "Invalid extents")
519509
}
520510

521511
if now.After(*valid.uExtent.EndTime) {

0 commit comments

Comments
 (0)