userbus

package
v0.0.0-...-3d2c863 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2024 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Overview

Package userbus provides business access to user domain.

Index

Constants

View Source
const (
	OrderByID      = "user_id"
	OrderByName    = "name"
	OrderByEmail   = "email"
	OrderByRoles   = "roles"
	OrderByEnabled = "enabled"
)

Set of fields that the results can be ordered by.

View Source
const (
	ActionUpdated = "updated"
)

Set of delegate actions.

View Source
const Name = "user"

Name represents the name of this domain.

Variables

View Source
var (
	RoleAdmin = newRole("ADMIN")
	RoleUser  = newRole("USER")
)

Set of possible roles for a user.

View Source
var (
	ErrNotFound              = errors.New("user not found")
	ErrUniqueEmail           = errors.New("email is not unique")
	ErrAuthenticationFailure = errors.New("authentication failed")
)

Set of error variables for CRUD operations.

View Source
var DefaultOrderBy = order.NewBy(OrderByID, order.ASC)

DefaultOrderBy represents the default way we sort.

Functions

func ActionUpdatedData

func ActionUpdatedData(uu UpdateUser, userID uuid.UUID) delegate.Data

ActionUpdatedData constructs the data for the updated action.

Types

type ActionUpdatedParms

type ActionUpdatedParms struct {
	UserID uuid.UUID
	UpdateUser
}

ActionUpdatedParms represents the parameters for the updated action.

func (*ActionUpdatedParms) Marshal

func (au *ActionUpdatedParms) Marshal() ([]byte, error)

Marshal returns the event parameters encoded as JSON.

func (*ActionUpdatedParms) String

func (au *ActionUpdatedParms) String() string

String returns a string representation of the action parameters.

type Business

type Business struct {
	// contains filtered or unexported fields
}

Business manages the set of APIs for user access.

func NewBusiness

func NewBusiness(log *logger.Logger, delegate *delegate.Delegate, storer Storer) *Business

NewBusiness constructs a user business API for use.

func (*Business) Authenticate

func (b *Business) Authenticate(ctx context.Context, email mail.Address, password string) (User, error)

Authenticate finds a user by their email and verifies their passworb. On success it returns a Claims User representing this user. The claims can be used to generate a token for future authentication.

func (*Business) Count

func (b *Business) Count(ctx context.Context, filter QueryFilter) (int, error)

Count returns the total number of users.

func (*Business) Create

func (b *Business) Create(ctx context.Context, nu NewUser) (User, error)

Create adds a new user to the system.

func (*Business) Delete

func (b *Business) Delete(ctx context.Context, usr User) error

Delete removes the specified user.

func (*Business) NewWithTx

func (b *Business) NewWithTx(tx transaction.CommitRollbacker) (*Business, error)

NewWithTx constructs a new business value that will use the specified transaction in any store related calls.

func (*Business) Query

func (b *Business) Query(ctx context.Context, filter QueryFilter, orderBy order.By, pageNumber int, rowsPerPage int) ([]User, error)

Query retrieves a list of existing users.

func (*Business) QueryByEmail

func (b *Business) QueryByEmail(ctx context.Context, email mail.Address) (User, error)

QueryByEmail finds the user by a specified user email.

func (*Business) QueryByID

func (b *Business) QueryByID(ctx context.Context, userID uuid.UUID) (User, error)

QueryByID finds the user by the specified Ib.

func (*Business) QueryByIDs

func (b *Business) QueryByIDs(ctx context.Context, userIDs []uuid.UUID) ([]User, error)

QueryByIDs finds the users by a specified User IDs.

func (*Business) Update

func (b *Business) Update(ctx context.Context, usr User, uu UpdateUser) (User, error)

Update modifies information about a user.

type NewUser

type NewUser struct {
	Name       string
	Email      mail.Address
	Roles      []Role
	Department string
	Password   string
}

NewUser contains information needed to create a new user.

func TestNewUsers

func TestNewUsers(n int, role Role) []NewUser

TestNewUsers is a helper method for testing.

type QueryFilter

type QueryFilter struct {
	ID               *uuid.UUID
	Name             *string `validate:"omitempty,min=3"`
	Email            *mail.Address
	StartCreatedDate *time.Time
	EndCreatedDate   *time.Time
}

QueryFilter holds the available fields a query can be filtered on. We are using pointer semantics because the With API mutates the value.

func (*QueryFilter) Validate

func (qf *QueryFilter) Validate() error

Validate can perform a check of the data against the validate tags.

func (*QueryFilter) WithEmail

func (qf *QueryFilter) WithEmail(email mail.Address)

WithEmail sets the Email field of the QueryFilter value.

func (*QueryFilter) WithEndCreatedDate

func (qf *QueryFilter) WithEndCreatedDate(endDate time.Time)

WithEndCreatedDate sets the EndCreatedDate field of the QueryFilter value.

func (*QueryFilter) WithName

func (qf *QueryFilter) WithName(name string)

WithName sets the Name field of the QueryFilter value.

func (*QueryFilter) WithStartDateCreated

func (qf *QueryFilter) WithStartDateCreated(startDate time.Time)

WithStartDateCreated sets the StartCreatedDate field of the QueryFilter value.

func (*QueryFilter) WithUserID

func (qf *QueryFilter) WithUserID(userID uuid.UUID)

WithUserID sets the ID field of the QueryFilter value.

type Role

type Role struct {
	// contains filtered or unexported fields
}

Role represents a role in the system.

func MustParseRole

func MustParseRole(value string) Role

MustParseRole parses the string value and returns a role if one exists. If an error occurs the function panics.

func ParseRole

func ParseRole(value string) (Role, error)

ParseRole parses the string value and returns a role if one exists.

func (Role) Equal

func (r Role) Equal(r2 Role) bool

Equal provides support for the go-cmp package and testing.

func (Role) MarshalText

func (r Role) MarshalText() ([]byte, error)

MarshalText implement the marshal interface for JSON conversions.

func (Role) Name

func (r Role) Name() string

Name returns the name of the role.

func (*Role) UnmarshalText

func (r *Role) UnmarshalText(data []byte) error

UnmarshalText implement the unmarshal interface for JSON conversions.

type Storer

type Storer interface {
	NewWithTx(tx transaction.CommitRollbacker) (Storer, error)
	Create(ctx context.Context, usr User) error
	Update(ctx context.Context, usr User) error
	Delete(ctx context.Context, usr User) error
	Query(ctx context.Context, filter QueryFilter, orderBy order.By, pageNumber int, rowsPerPage int) ([]User, error)
	Count(ctx context.Context, filter QueryFilter) (int, error)
	QueryByID(ctx context.Context, userID uuid.UUID) (User, error)
	QueryByIDs(ctx context.Context, userID []uuid.UUID) ([]User, error)
	QueryByEmail(ctx context.Context, email mail.Address) (User, error)
}

Storer interface declares the behavior this package needs to perists and retrieve data.

type UpdateUser

type UpdateUser struct {
	Name       *string
	Email      *mail.Address
	Roles      []Role
	Department *string
	Password   *string
	Enabled    *bool
}

UpdateUser contains information needed to update a user.

type User

type User struct {
	ID           uuid.UUID
	Name         string
	Email        mail.Address
	Roles        []Role
	PasswordHash []byte
	Department   string
	Enabled      bool
	DateCreated  time.Time
	DateUpdated  time.Time
}

User represents information about an individual user.

func TestSeedUsers

func TestSeedUsers(ctx context.Context, n int, role Role, api *Business) ([]User, error)

TestSeedUsers is a helper method for testing.

Directories

Path Synopsis
stores
usercache
Package usercache contains user related CRUD functionality with caching.
Package usercache contains user related CRUD functionality with caching.
userdb
Package userdb contains user related CRUD functionality.
Package userdb contains user related CRUD functionality.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL