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 }