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  )