userbus

package
v0.0.0-...-80f6a67 Latest Latest
Warning

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

Go to latest
Published: May 2, 2024 License: Apache-2.0 Imports: 15 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 rlog.Ctx, 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 password. 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) ExecuteUnderTransaction

func (b *Business) ExecuteUnderTransaction(tx transaction.Transaction) (*Business, error)

ExecuteUnderTransaction constructs a new Core 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 ID.

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
	PasswordConfirm string
}

NewUser contains information needed to create a new user.

func TestGenerateNewUsers

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

TestGenerateNewUsers 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 {
	ExecuteUnderTransaction(tx transaction.Transaction) (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
	PasswordConfirm *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 TestGenerateSeedUsers

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

TestGenerateSeedUsers is a helper method for testing.

Directories

Path Synopsis
stores
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