github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/domain/bundlereferences/converter.go (about) 1 package bundlereferences 2 3 import ( 4 "database/sql" 5 "fmt" 6 7 "github.com/kyma-incubator/compass/components/director/internal/model" 8 "github.com/kyma-incubator/compass/components/director/internal/repo" 9 "github.com/pkg/errors" 10 ) 11 12 type converter struct{} 13 14 // NewConverter returns a new Converter that can later be used to make the conversions between the GraphQL, service, and repository layer representations of a Compass BundleReference 15 func NewConverter() *converter { 16 return &converter{} 17 } 18 19 // ToEntity converts the provided service-layer representation of a BundleReference to the repository-layer one. 20 func (c *converter) ToEntity(in model.BundleReference) Entity { 21 var apiDefID sql.NullString 22 var eventDefID sql.NullString 23 var apiDefaultTargetURL sql.NullString 24 25 switch in.ObjectType { 26 case model.BundleAPIReference: 27 apiDefID = repo.NewNullableString(in.ObjectID) 28 apiDefaultTargetURL = repo.NewNullableString(in.APIDefaultTargetURL) 29 case model.BundleEventReference: 30 eventDefID = repo.NewNullableString(in.ObjectID) 31 } 32 33 return Entity{ 34 ID: in.ID, 35 BundleID: repo.NewNullableString(in.BundleID), 36 APIDefID: apiDefID, 37 EventDefID: eventDefID, 38 APIDefaultTargetURL: apiDefaultTargetURL, 39 IsDefaultBundle: repo.NewNullableBool(in.IsDefaultBundle), 40 } 41 } 42 43 // FromEntity converts the provided Entity repo-layer representation of a BundleReference to the service-layer representation model.BundleReference. 44 func (c *converter) FromEntity(in Entity) (model.BundleReference, error) { 45 objectID, objectType, err := c.objectReferenceFromEntity(in) 46 if err != nil { 47 return model.BundleReference{}, errors.Wrap(err, "while determining object reference") 48 } 49 50 return model.BundleReference{ 51 ID: in.ID, 52 BundleID: repo.StringPtrFromNullableString(in.BundleID), 53 ObjectType: objectType, 54 ObjectID: repo.StringPtrFromNullableString(objectID), 55 APIDefaultTargetURL: repo.StringPtrFromNullableString(in.APIDefaultTargetURL), 56 IsDefaultBundle: repo.BoolPtrFromNullableBool(in.IsDefaultBundle), 57 }, nil 58 } 59 60 func (c *converter) objectReferenceFromEntity(in Entity) (sql.NullString, model.BundleReferenceObjectType, error) { 61 if in.APIDefID.Valid { 62 return in.APIDefID, model.BundleAPIReference, nil 63 } 64 65 if in.EventDefID.Valid { 66 return in.EventDefID, model.BundleEventReference, nil 67 } 68 69 return sql.NullString{}, "", fmt.Errorf("incorrect Object Reference ID and its type for Reference Entity with bundle ID %q", *repo.StringPtrFromNullableString(in.BundleID)) 70 }