github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/domain/certsubjectmapping/converter.go (about) 1 package certsubjectmapping 2 3 import ( 4 "encoding/json" 5 6 "github.com/kyma-incubator/compass/components/director/internal/model" 7 "github.com/kyma-incubator/compass/components/director/pkg/graphql" 8 "github.com/pkg/errors" 9 ) 10 11 type converter struct{} 12 13 // NewConverter creates a new certificate subject mapping converter 14 func NewConverter() *converter { 15 return &converter{} 16 } 17 18 // FromGraphql converts from graphql.CertificateSubjectMappingInput to model.CertSubjectMapping 19 func (c *converter) FromGraphql(id string, in graphql.CertificateSubjectMappingInput) *model.CertSubjectMapping { 20 return &model.CertSubjectMapping{ 21 ID: id, 22 Subject: in.Subject, 23 ConsumerType: in.ConsumerType, 24 InternalConsumerID: in.InternalConsumerID, 25 TenantAccessLevels: in.TenantAccessLevels, 26 } 27 } 28 29 // ToGraphQL converts from model.CertSubjectMapping to graphql.CertificateSubjectMapping 30 func (c *converter) ToGraphQL(in *model.CertSubjectMapping) *graphql.CertificateSubjectMapping { 31 if in == nil { 32 return nil 33 } 34 35 return &graphql.CertificateSubjectMapping{ 36 ID: in.ID, 37 Subject: in.Subject, 38 ConsumerType: in.ConsumerType, 39 InternalConsumerID: in.InternalConsumerID, 40 TenantAccessLevels: in.TenantAccessLevels, 41 } 42 } 43 44 // MultipleToGraphQL converts multiple model.CertSubjectMapping models to graphql.CertificateSubjectMapping 45 func (c *converter) MultipleToGraphQL(in []*model.CertSubjectMapping) []*graphql.CertificateSubjectMapping { 46 if in == nil { 47 return nil 48 } 49 50 certSubjectMappings := make([]*graphql.CertificateSubjectMapping, 0, len(in)) 51 for _, i := range in { 52 if i == nil { 53 continue 54 } 55 certSubjectMappings = append(certSubjectMappings, c.ToGraphQL(i)) 56 } 57 58 return certSubjectMappings 59 } 60 61 // ToEntity converts model.CertSubjectMapping to Entity 62 func (c *converter) ToEntity(in *model.CertSubjectMapping) (*Entity, error) { 63 if in == nil { 64 return nil, nil 65 } 66 67 marshalledTntAccessLevels, err := json.Marshal(in.TenantAccessLevels) 68 if err != nil { 69 return nil, errors.Wrap(err, "while marshalling tenant access levels") 70 } 71 72 return &Entity{ 73 ID: in.ID, 74 Subject: in.Subject, 75 ConsumerType: in.ConsumerType, 76 InternalConsumerID: in.InternalConsumerID, 77 TenantAccessLevels: string(marshalledTntAccessLevels), 78 }, nil 79 } 80 81 // FromEntity converts Entity to model.CertSubjectMapping 82 func (c *converter) FromEntity(e *Entity) (*model.CertSubjectMapping, error) { 83 if e == nil { 84 return nil, nil 85 } 86 87 var unmarshalledTntAccessLevels []string 88 err := json.Unmarshal([]byte(e.TenantAccessLevels), &unmarshalledTntAccessLevels) 89 if err != nil { 90 return nil, errors.Wrap(err, "while unmarshalling tenant access levels") 91 } 92 93 return &model.CertSubjectMapping{ 94 ID: e.ID, 95 Subject: e.Subject, 96 ConsumerType: e.ConsumerType, 97 InternalConsumerID: e.InternalConsumerID, 98 TenantAccessLevels: unmarshalledTntAccessLevels, 99 }, nil 100 }