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

     1  package runtime
     2  
     3  import (
     4  	"database/sql"
     5  	"time"
     6  
     7  	"github.com/kyma-incubator/compass/components/director/pkg/apperrors"
     8  
     9  	"github.com/kyma-incubator/compass/components/director/internal/model"
    10  	"github.com/kyma-incubator/compass/components/director/pkg/graphql"
    11  )
    12  
    13  type converter struct {
    14  	webhook WebhookConverter
    15  }
    16  
    17  // NewConverter missing godoc
    18  func NewConverter(webhook WebhookConverter) *converter {
    19  	return &converter{
    20  		webhook: webhook,
    21  	}
    22  }
    23  
    24  // ToGraphQL missing godoc
    25  func (c *converter) ToGraphQL(in *model.Runtime) *graphql.Runtime {
    26  	if in == nil {
    27  		return nil
    28  	}
    29  
    30  	return &graphql.Runtime{
    31  		ID:                   in.ID,
    32  		Status:               c.statusToGraphQL(in.Status),
    33  		Name:                 in.Name,
    34  		Description:          in.Description,
    35  		Metadata:             c.metadataToGraphQL(in.CreationTimestamp),
    36  		ApplicationNamespace: in.ApplicationNamespace,
    37  	}
    38  }
    39  
    40  // MultipleToGraphQL missing godoc
    41  func (c *converter) MultipleToGraphQL(in []*model.Runtime) []*graphql.Runtime {
    42  	runtimes := make([]*graphql.Runtime, 0, len(in))
    43  	for _, r := range in {
    44  		if r == nil {
    45  			continue
    46  		}
    47  
    48  		runtimes = append(runtimes, c.ToGraphQL(r))
    49  	}
    50  
    51  	return runtimes
    52  }
    53  
    54  // RegisterInputFromGraphQL missing godoc
    55  func (c *converter) RegisterInputFromGraphQL(in graphql.RuntimeRegisterInput) (model.RuntimeRegisterInput, error) {
    56  	var labels map[string]interface{}
    57  	if in.Labels != nil {
    58  		labels = in.Labels
    59  	}
    60  
    61  	webhooks, err := c.webhook.MultipleInputFromGraphQL(in.Webhooks)
    62  	if err != nil {
    63  		return model.RuntimeRegisterInput{}, err
    64  	}
    65  
    66  	return model.RuntimeRegisterInput{
    67  		Name:                 in.Name,
    68  		Description:          in.Description,
    69  		Labels:               labels,
    70  		Webhooks:             webhooks,
    71  		StatusCondition:      c.statusConditionToModel(in.StatusCondition),
    72  		ApplicationNamespace: in.ApplicationNamespace,
    73  	}, nil
    74  }
    75  
    76  // UpdateInputFromGraphQL missing godoc
    77  func (c *converter) UpdateInputFromGraphQL(in graphql.RuntimeUpdateInput) model.RuntimeUpdateInput {
    78  	var labels map[string]interface{}
    79  	if in.Labels != nil {
    80  		labels = in.Labels
    81  	}
    82  
    83  	return model.RuntimeUpdateInput{
    84  		Name:                 in.Name,
    85  		Description:          in.Description,
    86  		Labels:               labels,
    87  		StatusCondition:      c.statusConditionToModel(in.StatusCondition),
    88  		ApplicationNamespace: in.ApplicationNamespace,
    89  	}
    90  }
    91  
    92  func (c *converter) statusToGraphQL(in *model.RuntimeStatus) *graphql.RuntimeStatus {
    93  	if in == nil {
    94  		return &graphql.RuntimeStatus{
    95  			Condition: graphql.RuntimeStatusConditionInitial,
    96  		}
    97  	}
    98  
    99  	var condition graphql.RuntimeStatusCondition
   100  
   101  	switch in.Condition {
   102  	case model.RuntimeStatusConditionInitial:
   103  		condition = graphql.RuntimeStatusConditionInitial
   104  	case model.RuntimeStatusConditionProvisioning:
   105  		condition = graphql.RuntimeStatusConditionProvisioning
   106  	case model.RuntimeStatusConditionFailed:
   107  		condition = graphql.RuntimeStatusConditionFailed
   108  	case model.RuntimeStatusConditionConnected:
   109  		condition = graphql.RuntimeStatusConditionConnected
   110  	default:
   111  		condition = graphql.RuntimeStatusConditionInitial
   112  	}
   113  
   114  	return &graphql.RuntimeStatus{
   115  		Condition: condition,
   116  		Timestamp: graphql.Timestamp(in.Timestamp),
   117  	}
   118  }
   119  
   120  func (c *converter) metadataToGraphQL(creationTimestamp time.Time) *graphql.RuntimeMetadata {
   121  	return &graphql.RuntimeMetadata{
   122  		CreationTimestamp: graphql.Timestamp(creationTimestamp),
   123  	}
   124  }
   125  
   126  func (c *converter) statusConditionToModel(in *graphql.RuntimeStatusCondition) *model.RuntimeStatusCondition {
   127  	if in == nil {
   128  		return nil
   129  	}
   130  
   131  	var condition model.RuntimeStatusCondition
   132  	switch *in {
   133  	case graphql.RuntimeStatusConditionConnected:
   134  		condition = model.RuntimeStatusConditionConnected
   135  	case graphql.RuntimeStatusConditionFailed:
   136  		condition = model.RuntimeStatusConditionFailed
   137  	case graphql.RuntimeStatusConditionProvisioning:
   138  		condition = model.RuntimeStatusConditionProvisioning
   139  	case graphql.RuntimeStatusConditionInitial:
   140  		fallthrough
   141  	default:
   142  		condition = model.RuntimeStatusConditionInitial
   143  	}
   144  
   145  	return &condition
   146  }
   147  
   148  func (*converter) ToEntity(model *model.Runtime) (*Runtime, error) {
   149  	if model == nil {
   150  		return nil, nil
   151  	}
   152  	var nullDescription sql.NullString
   153  	if model.Description != nil && len(*model.Description) > 0 {
   154  		nullDescription = sql.NullString{
   155  			String: *model.Description,
   156  			Valid:  true,
   157  		}
   158  	}
   159  	if model.Status == nil {
   160  		return nil, apperrors.NewInternalError("invalid input model")
   161  	}
   162  
   163  	var nullApplicationNamespace sql.NullString
   164  	if model.ApplicationNamespace != nil && len(*model.ApplicationNamespace) > 0 {
   165  		nullApplicationNamespace = sql.NullString{
   166  			String: *model.ApplicationNamespace,
   167  			Valid:  true,
   168  		}
   169  	}
   170  
   171  	return &Runtime{
   172  		ID:                   model.ID,
   173  		Name:                 model.Name,
   174  		Description:          nullDescription,
   175  		StatusCondition:      string(model.Status.Condition),
   176  		StatusTimestamp:      model.Status.Timestamp,
   177  		CreationTimestamp:    model.CreationTimestamp,
   178  		ApplicationNamespace: nullApplicationNamespace,
   179  	}, nil
   180  }
   181  
   182  func (*converter) FromEntity(e *Runtime) *model.Runtime {
   183  	if e == nil {
   184  		return nil
   185  	}
   186  
   187  	var description *string
   188  	if e.Description.Valid {
   189  		description = new(string)
   190  		*description = e.Description.String
   191  	}
   192  
   193  	var applicationNamespace *string
   194  	if e.ApplicationNamespace.Valid {
   195  		applicationNamespace = new(string)
   196  		*applicationNamespace = e.ApplicationNamespace.String
   197  	}
   198  
   199  	return &model.Runtime{
   200  		ID:          e.ID,
   201  		Name:        e.Name,
   202  		Description: description,
   203  		Status: &model.RuntimeStatus{
   204  			Condition: model.RuntimeStatusCondition(e.StatusCondition),
   205  			Timestamp: e.StatusTimestamp,
   206  		},
   207  		CreationTimestamp:    e.CreationTimestamp,
   208  		ApplicationNamespace: applicationNamespace,
   209  	}
   210  }