flamingo.me/flamingo-commerce/v3@v3.11.0/customer/domain/customer.go (about) 1 package domain 2 3 //go:generate go run github.com/vektra/mockery/v2@v2.42.3 --name Customer --case snake 4 //go:generate go run github.com/vektra/mockery/v2@v2.42.3 --name CustomerIdentityService --case snake 5 6 import ( 7 "context" 8 "errors" 9 "time" 10 11 "flamingo.me/flamingo/v3/core/auth" 12 ) 13 14 type ( 15 // Customer data interface 16 Customer interface { 17 GetID() string 18 GetPersonalData() PersonData 19 GetAddresses() []Address 20 GetDefaultShippingAddress() *Address 21 GetDefaultBillingAddress() *Address 22 } 23 24 // PersonData contains personal data 25 PersonData struct { 26 // Gender male, female, other, unknown 27 Gender string 28 FirstName string 29 LastName string 30 MiddleName string 31 MainEmail string 32 // Prefix such as (mr, mrs, ms) string 33 Prefix string 34 Birthday time.Time 35 Nationality string 36 } 37 38 // Address data of a customer 39 Address struct { 40 ID string 41 RegionCode string 42 CountryCode string 43 Company string 44 Street string 45 StreetNr string 46 State string 47 AdditionalAddressLines []string 48 Telephone string 49 PostCode string 50 City string 51 Firstname string 52 Lastname string 53 Email string 54 Prefix string 55 DefaultBilling bool 56 DefaultShipping bool 57 } 58 59 // CustomerIdentityService to retrieve customers by Identity 60 CustomerIdentityService interface { 61 GetByIdentity(ctx context.Context, identity auth.Identity) (Customer, error) 62 } 63 ) 64 65 var ( 66 // ErrCustomerNotFoundError - semantic error returned if no customer was found 67 ErrCustomerNotFoundError = errors.New("Customer not found") 68 ) 69 70 const ( 71 // GenderMale for male customers 72 GenderMale = "male" 73 // GenderFemale for female customers 74 GenderFemale = "female" 75 // GenderOther for other customers 76 GenderOther = "other" 77 // GenderUnknown unknown 78 GenderUnknown = "" 79 )