Documentation ¶
Overview ¶
Package user provides an example of a core business API. Right now these calls are just wrapping the data/data layer. But at some point you will want auditing or something that isn't specific to the data/store layer.
Index ¶
- Variables
- type Core
- func (c Core) Authenticate(ctx context.Context, now time.Time, email, password string) (auth.Claims, error)
- func (c Core) Create(ctx context.Context, nu NewUser, now time.Time) (User, error)
- func (c Core) Delete(ctx context.Context, userID string) error
- func (c Core) Query(ctx context.Context, pageNumber int, rowsPerPage int) ([]User, error)
- func (c Core) QueryByEmail(ctx context.Context, email string) (User, error)
- func (c Core) QueryByID(ctx context.Context, userID string) (User, error)
- func (c Core) Update(ctx context.Context, userID string, uu UpdateUser, now time.Time) error
- type NewUser
- type UpdateUser
- type User
Constants ¶
This section is empty.
Variables ¶
var ( ErrNotFound = errors.New("user not found") ErrInvalidID = errors.New("ID is not in its proper form") ErrAuthenticationFailure = errors.New("authentication failed") )
Set of error variables for CRUD operations.
Functions ¶
This section is empty.
Types ¶
type Core ¶
type Core struct {
// contains filtered or unexported fields
}
Core manages the set of API's for user access.
func NewCore ¶
func NewCore(log *zap.SugaredLogger, sqlxDB *sqlx.DB, client email.EmailClient) Core
NewCore constructs a core for user api access.
func (Core) Authenticate ¶
func (c Core) Authenticate(ctx context.Context, now time.Time, email, password string) (auth.Claims, error)
Authenticate finds a user by their email and verifies their password. On success it returns a Claims User representing this user. The claims can be used to generate a token for future authentication.
func (Core) QueryByEmail ¶
QueryByEmail gets the specified user from the database by email.
type NewUser ¶
type NewUser struct { Name string `json:"name" validate:"required"` Email string `json:"email" validate:"required,email"` Roles []string `json:"roles" validate:"required"` Password string `json:"password" validate:"required"` PasswordConfirm string `json:"password_confirm" validate:"eqfield=Password"` }
NewUser contains information needed to create a new User.
type UpdateUser ¶
type UpdateUser struct { Name *string `json:"name"` Email *string `json:"email" validate:"omitempty,email"` Roles []string `json:"roles"` Password *string `json:"password"` PasswordConfirm *string `json:"password_confirm" validate:"omitempty,eqfield=Password"` }
UpdateUser defines what information may be provided to modify an existing User. All fields are optional so clients can send just the fields they want changed. It uses pointer fields so we can differentiate between a field that was not provided and a field that was provided as explicitly blank. Normally we do not want to use pointers to basic types but we make exceptions around marshalling/unmarshalling.