39 lines
845 B
Go
39 lines
845 B
Go
package person
|
|
|
|
import "strings"
|
|
|
|
// Name represents a person's first and last name as a reusable value object.
|
|
type Name struct {
|
|
FirstName string `bson:"firstName,omitempty" json:"first_name,omitempty"`
|
|
LastName string `bson:"lastName,omitempty" json:"last_name,omitempty"`
|
|
}
|
|
|
|
func (n Name) Trim() Name {
|
|
return Name{
|
|
FirstName: strings.TrimSpace(n.FirstName),
|
|
LastName: strings.TrimSpace(n.LastName),
|
|
}
|
|
}
|
|
|
|
func (n Name) WithFallback(fallback Name) Name {
|
|
n = n.Trim()
|
|
fallback = fallback.Trim()
|
|
if n.FirstName == "" {
|
|
n.FirstName = fallback.FirstName
|
|
}
|
|
if n.LastName == "" {
|
|
n.LastName = fallback.LastName
|
|
}
|
|
return n
|
|
}
|
|
|
|
func (n Name) FullName() string {
|
|
n = n.Trim()
|
|
return strings.TrimSpace(n.FirstName + " " + n.LastName)
|
|
}
|
|
|
|
func (n Name) IsZero() bool {
|
|
n = n.Trim()
|
|
return n.FirstName == "" && n.LastName == ""
|
|
}
|