package models import ( "time" "github.com/golang-jwt/jwt/v4" ) type Account struct { ID string `json:"id"` Email string `json:"email"` FirstName string `json:"firstName,omitempty"` LastName string `json:"lastName,omitempty"` VerifiedIdentity *bool `json:"verifiedIdentity,omitempty"` BirthDate string `json:"birthdate,omitempty"` Type string `json:"type,omitempty"` LocalCredentials } type User struct { ID string `json:"user_id"` Status string `json:"status"` BookingID string `json:"booking_id"` } type LocalCredentials struct { Email string EmailVerified bool EmailValidationCode string PhoneNumber string PhoneNumberVerified bool PhoneNumberValidationCode string } type UserClaims struct { jwt.RegisteredClaims } func (account Account) CreateToken(ttl time.Duration, key string) (token string, err error) { expiresAt := jwt.NewNumericDate(time.Now().Add(ttl)) claims := UserClaims{ RegisteredClaims: jwt.RegisteredClaims{ Subject: account.ID, ExpiresAt: expiresAt, }, } t := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return t.SignedString([]byte(key)) }