1
0
mirror of https://github.com/raseels-repos/golang-saas-starter-kit.git synced 2025-06-06 23:46:29 +02:00
2019-08-04 23:24:30 -08:00

65 lines
2.4 KiB
Go

package signup
import (
"context"
"geeks-accelerator/oss/saas-starter-kit/internal/account"
"geeks-accelerator/oss/saas-starter-kit/internal/user"
)
// SignupRequest contains information needed perform signup.
type SignupRequest struct {
Account SignupAccount `json:"account" validate:"required"` // Account details.
User SignupUser `json:"user" validate:"required"` // User details.
}
// SignupAccount defined the details needed for account.
type SignupAccount struct {
Name string `json:"name" validate:"required,unique-name" example:"Company {RANDOM_UUID}"`
Address1 string `json:"address1" validate:"required" example:"221 Tatitlek Ave"`
Address2 string `json:"address2" validate:"omitempty" example:"Box #1832"`
City string `json:"city" validate:"required" example:"Valdez"`
Region string `json:"region" validate:"required" example:"AK"`
Country string `json:"country" validate:"required" example:"USA"`
Zipcode string `json:"zipcode" validate:"required" example:"99686"`
Timezone *string `json:"timezone" validate:"omitempty" example:"America/Anchorage"`
}
// SignupUser defined the details needed for user.
type SignupUser struct {
FirstName string `json:"first_name" validate:"required" example:"Gabi"`
LastName string `json:"last_name" validate:"required" example:"May"`
Email string `json:"email" validate:"required,email,unique-email" example:"{RANDOM_EMAIL}"`
Password string `json:"password" validate:"required" example:"SecretString"`
PasswordConfirm string `json:"password_confirm" validate:"required,eqfield=Password" example:"SecretString"`
}
// SignupResult response signup with created account and user.
type SignupResult struct {
Account *account.Account `json:"account"`
User *user.User `json:"user"`
}
// SignupResponse represents the user and account created for signup that is returned for display.
type SignupResponse struct {
Account *account.AccountResponse `json:"account"`
User *user.UserResponse `json:"user"`
}
// Response transforms SignupResult to SignupResponse that is used for display.
// Additional filtering by context values or translations could be applied.
func (m *SignupResult) Response(ctx context.Context) *SignupResponse {
if m == nil {
return nil
}
r := &SignupResponse{}
if m.Account != nil {
r.Account = m.Account.Response(ctx)
}
if m.User != nil {
r.User = m.User.Response(ctx)
}
return r
}