github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/domain/bundleinstanceauth/converter.go (about)

     1  package bundleinstanceauth
     2  
     3  import (
     4  	"database/sql"
     5  	"encoding/json"
     6  
     7  	"github.com/kyma-incubator/compass/components/director/internal/repo"
     8  
     9  	"github.com/kyma-incubator/compass/components/director/internal/model"
    10  	"github.com/kyma-incubator/compass/components/director/pkg/graphql"
    11  	"github.com/pkg/errors"
    12  )
    13  
    14  // AuthConverter missing godoc
    15  //go:generate mockery --name=AuthConverter --output=automock --outpkg=automock --case=underscore --disable-version-string
    16  type AuthConverter interface {
    17  	ToGraphQL(in *model.Auth) (*graphql.Auth, error)
    18  	InputFromGraphQL(in *graphql.AuthInput) (*model.AuthInput, error)
    19  }
    20  
    21  type converter struct {
    22  	authConverter AuthConverter
    23  }
    24  
    25  // NewConverter missing godoc
    26  func NewConverter(authConverter AuthConverter) *converter {
    27  	return &converter{
    28  		authConverter: authConverter,
    29  	}
    30  }
    31  
    32  // ToGraphQL missing godoc
    33  func (c *converter) ToGraphQL(in *model.BundleInstanceAuth) (*graphql.BundleInstanceAuth, error) {
    34  	if in == nil {
    35  		return nil, nil
    36  	}
    37  
    38  	auth, err := c.authConverter.ToGraphQL(in.Auth)
    39  	if err != nil {
    40  		return nil, errors.Wrap(err, "while converting Auth to GraphQL")
    41  	}
    42  
    43  	return &graphql.BundleInstanceAuth{
    44  		ID:               in.ID,
    45  		Context:          c.strPtrToJSONPtr(in.Context),
    46  		InputParams:      c.strPtrToJSONPtr(in.InputParams),
    47  		Auth:             auth,
    48  		Status:           c.statusToGraphQL(in.Status),
    49  		RuntimeID:        in.RuntimeID,
    50  		RuntimeContextID: in.RuntimeContextID,
    51  	}, nil
    52  }
    53  
    54  // MultipleToGraphQL missing godoc
    55  func (c *converter) MultipleToGraphQL(in []*model.BundleInstanceAuth) ([]*graphql.BundleInstanceAuth, error) {
    56  	bundleInstanceAuths := make([]*graphql.BundleInstanceAuth, 0, len(in))
    57  	for _, r := range in {
    58  		if r == nil {
    59  			continue
    60  		}
    61  		pia, err := c.ToGraphQL(r)
    62  		if err != nil {
    63  			return nil, err
    64  		}
    65  		bundleInstanceAuths = append(bundleInstanceAuths, pia)
    66  	}
    67  
    68  	return bundleInstanceAuths, nil
    69  }
    70  
    71  // RequestInputFromGraphQL missing godoc
    72  func (c *converter) RequestInputFromGraphQL(in graphql.BundleInstanceAuthRequestInput) model.BundleInstanceAuthRequestInput {
    73  	return model.BundleInstanceAuthRequestInput{
    74  		ID:          in.ID,
    75  		Context:     c.jsonPtrToStrPtr(in.Context),
    76  		InputParams: c.jsonPtrToStrPtr(in.InputParams),
    77  	}
    78  }
    79  
    80  // CreateInputFromGraphQL converts graphql.BundleInstanceAuthCreateInput to model.BundleInstanceAuthCreateInput
    81  func (c *converter) CreateInputFromGraphQL(in graphql.BundleInstanceAuthCreateInput) (model.BundleInstanceAuthCreateInput, error) {
    82  	auth, err := c.authConverter.InputFromGraphQL(in.Auth)
    83  	if err != nil {
    84  		return model.BundleInstanceAuthCreateInput{}, errors.Wrap(err, "while converting Auth")
    85  	}
    86  
    87  	return model.BundleInstanceAuthCreateInput{
    88  		Context:          c.jsonPtrToStrPtr(in.Context),
    89  		InputParams:      c.jsonPtrToStrPtr(in.InputParams),
    90  		Auth:             auth,
    91  		RuntimeID:        in.RuntimeID,
    92  		RuntimeContextID: in.RuntimeContextID,
    93  	}, nil
    94  }
    95  
    96  // UpdateInputFromGraphQL converts graphql.BundleInstanceAuthUpdateInput to model.BundleInstanceAuthUpdateInput
    97  func (c *converter) UpdateInputFromGraphQL(in graphql.BundleInstanceAuthUpdateInput) (model.BundleInstanceAuthUpdateInput, error) {
    98  	auth, err := c.authConverter.InputFromGraphQL(in.Auth)
    99  	if err != nil {
   100  		return model.BundleInstanceAuthUpdateInput{}, errors.Wrap(err, "while converting Auth")
   101  	}
   102  
   103  	return model.BundleInstanceAuthUpdateInput{
   104  		Context:     c.jsonPtrToStrPtr(in.Context),
   105  		InputParams: c.jsonPtrToStrPtr(in.InputParams),
   106  		Auth:        auth,
   107  	}, nil
   108  }
   109  
   110  // SetInputFromGraphQL missing godoc
   111  func (c *converter) SetInputFromGraphQL(in graphql.BundleInstanceAuthSetInput) (model.BundleInstanceAuthSetInput, error) {
   112  	auth, err := c.authConverter.InputFromGraphQL(in.Auth)
   113  	if err != nil {
   114  		return model.BundleInstanceAuthSetInput{}, errors.Wrap(err, "while converting Auth")
   115  	}
   116  
   117  	out := model.BundleInstanceAuthSetInput{
   118  		Auth: auth,
   119  	}
   120  
   121  	if in.Status != nil {
   122  		out.Status = &model.BundleInstanceAuthStatusInput{
   123  			Condition: model.BundleInstanceAuthSetStatusConditionInput(in.Status.Condition),
   124  			Message:   in.Status.Message,
   125  			Reason:    in.Status.Reason,
   126  		}
   127  	}
   128  
   129  	return out, nil
   130  }
   131  
   132  // ToEntity missing godoc
   133  func (c *converter) ToEntity(in *model.BundleInstanceAuth) (*Entity, error) {
   134  	out := &Entity{
   135  		ID:               in.ID,
   136  		BundleID:         in.BundleID,
   137  		OwnerID:          in.Owner,
   138  		RuntimeID:        repo.NewNullableString(in.RuntimeID),
   139  		RuntimeContextID: repo.NewNullableString(in.RuntimeContextID),
   140  		Context:          repo.NewNullableString(in.Context),
   141  		InputParams:      repo.NewNullableString(in.InputParams),
   142  	}
   143  	authValue, err := c.nullStringFromAuthPtr(in.Auth)
   144  	if err != nil {
   145  		return nil, err
   146  	}
   147  	out.AuthValue = authValue
   148  
   149  	if in.Status != nil {
   150  		out.StatusCondition = string(in.Status.Condition)
   151  		out.StatusTimestamp = in.Status.Timestamp
   152  		out.StatusMessage = in.Status.Message
   153  		out.StatusReason = in.Status.Reason
   154  	}
   155  
   156  	return out, nil
   157  }
   158  
   159  // FromEntity missing godoc
   160  func (c *converter) FromEntity(in *Entity) (*model.BundleInstanceAuth, error) {
   161  	auth, err := c.authPtrFromNullString(in.AuthValue)
   162  	if err != nil {
   163  		return nil, err
   164  	}
   165  
   166  	return &model.BundleInstanceAuth{
   167  		ID:               in.ID,
   168  		BundleID:         in.BundleID,
   169  		Owner:            in.OwnerID,
   170  		RuntimeID:        repo.StringPtrFromNullableString(in.RuntimeID),
   171  		RuntimeContextID: repo.StringPtrFromNullableString(in.RuntimeContextID),
   172  		Context:          repo.StringPtrFromNullableString(in.Context),
   173  		InputParams:      repo.StringPtrFromNullableString(in.InputParams),
   174  		Auth:             auth,
   175  		Status: &model.BundleInstanceAuthStatus{
   176  			Condition: model.BundleInstanceAuthStatusCondition(in.StatusCondition),
   177  			Timestamp: in.StatusTimestamp,
   178  			Message:   in.StatusMessage,
   179  			Reason:    in.StatusReason,
   180  		},
   181  	}, nil
   182  }
   183  
   184  func (c *converter) statusToGraphQL(in *model.BundleInstanceAuthStatus) *graphql.BundleInstanceAuthStatus {
   185  	if in == nil {
   186  		return nil
   187  	}
   188  
   189  	return &graphql.BundleInstanceAuthStatus{
   190  		Condition: graphql.BundleInstanceAuthStatusCondition(in.Condition),
   191  		Timestamp: graphql.Timestamp(in.Timestamp),
   192  		Message:   in.Message,
   193  		Reason:    in.Reason,
   194  	}
   195  }
   196  
   197  func (c *converter) strPtrToJSONPtr(in *string) *graphql.JSON {
   198  	if in == nil {
   199  		return nil
   200  	}
   201  	out := graphql.JSON(*in)
   202  	return &out
   203  }
   204  
   205  func (c *converter) jsonPtrToStrPtr(in *graphql.JSON) *string {
   206  	if in == nil {
   207  		return nil
   208  	}
   209  	out := string(*in)
   210  	return &out
   211  }
   212  
   213  func (c *converter) nullStringFromAuthPtr(in *model.Auth) (sql.NullString, error) {
   214  	if in == nil {
   215  		return sql.NullString{}, nil
   216  	}
   217  	valueMarshalled, err := json.Marshal(*in)
   218  	if err != nil {
   219  		return sql.NullString{}, errors.Wrap(err, "while marshalling Auth")
   220  	}
   221  	return sql.NullString{
   222  		String: string(valueMarshalled),
   223  		Valid:  true,
   224  	}, nil
   225  }
   226  
   227  func (c *converter) authPtrFromNullString(in sql.NullString) (*model.Auth, error) {
   228  	if !in.Valid {
   229  		return nil, nil
   230  	}
   231  	var auth model.Auth
   232  	err := json.Unmarshal([]byte(in.String), &auth)
   233  	if err != nil {
   234  		return nil, err
   235  	}
   236  	return &auth, nil
   237  }