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 }