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  }