|
@@ -0,0 +1,81 @@
|
|
|
+package graphql
|
|
|
+
|
|
|
+import (
|
|
|
+ "github.com/Nerzal/gocloak/v12"
|
|
|
+ "github.com/gshopify/service-wrapper/model"
|
|
|
+ "github.com/gshopify/service-wrapper/scalar"
|
|
|
+ "gshopper.com/gshopify/customer/graphql/generated"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+func User2Customer(user *gocloak.User) *generated.Customer {
|
|
|
+ if user == nil {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+
|
|
|
+ customer := &generated.Customer{
|
|
|
+ ID: *user.ID,
|
|
|
+ Email: user.Email,
|
|
|
+ FirstName: user.FirstName,
|
|
|
+ LastName: user.LastName,
|
|
|
+ CreatedAt: scalar.DateTime(0),
|
|
|
+ UpdatedAt: scalar.DateTime(0),
|
|
|
+ }
|
|
|
+
|
|
|
+ customer.DisplayName = func(u *gocloak.User) string {
|
|
|
+ if u == nil {
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+
|
|
|
+ if u.FirstName != nil || u.LastName != nil {
|
|
|
+ n := strings.Builder{}
|
|
|
+ if u.FirstName != nil && *u.FirstName != "" {
|
|
|
+ n.WriteString(*u.FirstName)
|
|
|
+ }
|
|
|
+
|
|
|
+ if u.LastName != nil || *u.LastName != "" {
|
|
|
+ n.WriteString(" ")
|
|
|
+ n.WriteString(*u.LastName)
|
|
|
+ }
|
|
|
+
|
|
|
+ return n.String()
|
|
|
+ }
|
|
|
+
|
|
|
+ return *u.Email
|
|
|
+ }(user)
|
|
|
+
|
|
|
+ if user.Attributes != nil {
|
|
|
+ for s, values := range *user.Attributes {
|
|
|
+ var meta *generated.Metafield
|
|
|
+
|
|
|
+ if len(values) < 1 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ switch s {
|
|
|
+ case "phone_number":
|
|
|
+ meta = NewMetafield(s, values[0], model.MetafieldTypeSingleLineTextField)
|
|
|
+ customer.Phone = gocloak.StringP(values[0])
|
|
|
+ case "phone_region":
|
|
|
+ meta = NewMetafield(s, values[0], model.MetafieldTypeSingleLineTextField)
|
|
|
+ case "phone_verified":
|
|
|
+ meta = NewMetafield(s, values[0], model.MetafieldTypeBoolean)
|
|
|
+ case "created_at":
|
|
|
+ _ = customer.CreatedAt.UnmarshalGQL(values[0])
|
|
|
+ meta = NewMetafield(s, values[0], model.MetafieldTypeDateTime)
|
|
|
+ case "updated_at":
|
|
|
+ _ = customer.UpdatedAt.UnmarshalGQL(values[0])
|
|
|
+ meta = NewMetafield(s, values[0], model.MetafieldTypeDateTime)
|
|
|
+ case "accepts_marketing":
|
|
|
+ customer.AcceptsMarketing = values[0] == "true"
|
|
|
+ meta = NewMetafield(s, values[0], model.MetafieldTypeBoolean)
|
|
|
+ default:
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ customer.Metafields = append(customer.Metafields, meta)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return customer
|
|
|
+}
|