-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathmember.go
More file actions
92 lines (87 loc) · 2.42 KB
/
Copy pathmember.go
File metadata and controls
92 lines (87 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package appie
import (
"context"
"fmt"
"strconv"
)
const fetchMemberQuery = `query FetchMember {
member {
__typename
...MemberFragment
}
}
fragment MemberAddressFragment on MemberAddress {
__typename
street
houseNumber
houseNumberExtra
postalCode
city
countryCode
}
fragment MemberFragment on Member {
__typename
address { __typename ...MemberAddressFragment }
analytics { __typename digimon idmon idsas batch firebase sitespect }
cards { __typename airmiles bonus gall }
company { __typename id name addressInvoice { __typename ...MemberAddressFragment } customOffersAllowed }
contactSubscriptions
dateOfBirth
emailAddress
gender
id
isB2B
memberships
name { __typename first last }
phoneNumber
customerProfileAudiences
customerProfileProperties { __typename key value }
}`
// memberResponse matches the GraphQL response for FetchMember.
type memberResponse struct {
Member struct {
ID int `json:"id"`
EmailAddress string `json:"emailAddress"`
Gender string `json:"gender"`
DateOfBirth string `json:"dateOfBirth"`
PhoneNumber string `json:"phoneNumber"`
IsB2B bool `json:"isB2B"`
Name struct {
First string `json:"first"`
Last string `json:"last"`
} `json:"name"`
Address Address `json:"address"`
Cards struct {
Bonus string `json:"bonus"`
Gall string `json:"gall"`
Airmiles string `json:"airmiles"`
} `json:"cards"`
CustomerProfileAudiences []string `json:"customerProfileAudiences"`
CustomerProfileProperties []struct {
Key string `json:"key"`
Value any `json:"value"`
} `json:"customerProfileProperties"`
} `json:"member"`
}
// GetMember retrieves the member profile including address,
// loyalty cards (Bonus, Gall & Gall), and customer segmentation data.
func (c *Client) GetMember(ctx context.Context) (*Member, error) {
var resp memberResponse
if err := c.DoGraphQL(ctx, fetchMemberQuery, nil, &resp); err != nil {
return nil, fmt.Errorf("get member failed: %w", err)
}
m := resp.Member
return &Member{
ID: strconv.Itoa(m.ID),
FirstName: m.Name.First,
LastName: m.Name.Last,
Email: m.EmailAddress,
Gender: m.Gender,
DateOfBirth: m.DateOfBirth,
PhoneNumber: m.PhoneNumber,
Address: m.Address,
BonusCardNumber: m.Cards.Bonus,
GallCardNumber: m.Cards.Gall,
Audiences: m.CustomerProfileAudiences,
}, nil
}