userbus

package
v0.1.15-0...-7ae3212 Latest Latest
Warning

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

Go to latest
Published: May 26, 2025 License: Apache-2.0 Imports: 16 Imported by: 0

Documentation

Overview

Package userbus provides business access to user domain.

Index

Constants

View Source
const (
	OrderByID      = "a"
	OrderByName    = "b"
	OrderByEmail   = "c"
	OrderByRoles   = "d"
	OrderByEnabled = "e"
)

Set of fields that the results can be ordered by.

View Source
const (
	ActionDeleted = "deleted"
)

Set of delegate actions.

View Source
const DomainName = "user"

DomainName represents the name of this domain.

Variables

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 ActionDeletedData

func ActionDeletedData(userID uuid.UUID) delegate.Data

ActionDeletedData constructs the data for the deleted action.

Types

type ActionDeletedParms

type ActionDeletedParms struct {
	UserID uuid.UUID
}

ActionDeletedParms represents the parameters for the deleted action.

func (*ActionDeletedParms) Marshal

func (act *ActionDeletedParms) Marshal() ([]byte, error)

Marshal returns the event parameters encoded as JSON.

func (*ActionDeletedParms) String

func (act *ActionDeletedParms) 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 (*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, actorID uuid.UUID, nu NewUser) (User, error)

Create adds a new user to the system.

func (*Business) Delete

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

Delete removes the specified user.

func (*Business) NewWithTx

func (b *Business) NewWithTx(tx sqldb.CommitRollbacker) (ExtBusiness, 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, page page.Page) ([]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) Update

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

Update modifies information about a user.

type ExtBusiness

type ExtBusiness interface {
	NewWithTx(tx sqldb.CommitRollbacker) (ExtBusiness, error)
	Create(ctx context.Context, actorID uuid.UUID, nu NewUser) (User, error)
	Update(ctx context.Context, actorID uuid.UUID, usr User, uu UpdateUser) (User, error)
	Delete(ctx context.Context, actorID uuid.UUID, usr User) error
	Query(ctx context.Context, filter QueryFilter, orderBy order.By, page page.Page) ([]User, error)
	Count(ctx context.Context, filter QueryFilter) (int, error)
	QueryByID(ctx context.Context, userID uuid.UUID) (User, error)
	QueryByEmail(ctx context.Context, email mail.Address) (User, error)
	Authenticate(ctx context.Context, email mail.Address, password string) (User, error)
}

ExtBusiness interface provides support for extensions that wrap extra functionality around the core busines logic.

func NewBusiness

func NewBusiness(log *logger.Logger, delegate *delegate.Delegate, storer Storer, extensions ...Extension) ExtBusiness

NewBusiness constructs a user business API for use.

type Extension

type Extension func(ExtBusiness) ExtBusiness

Extension is a function that wraps a new layer of business logic around the existing business logic.

type NewUser

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

NewUser contains information needed to create a new user.

func TestNewUsers

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

TestNewUsers is a helper method for testing.

type QueryFilter

type QueryFilter struct {
	ID               *uuid.UUID
	Name             *name.Name
	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.

type Storer

type Storer interface {
	NewWithTx(tx sqldb.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, page page.Page) ([]User, error)
	Count(ctx context.Context, filter QueryFilter) (int, error)
	QueryByID(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 persist and retrieve data.

type UpdateUser

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

UpdateUser contains information needed to update a user.

type User

type User struct {
	ID           uuid.UUID
	Name         name.Name
	Email        mail.Address
	Roles        []role.Role
	PasswordHash []byte
	Department   name.Null
	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.Role, api ExtBusiness) ([]User, error)

TestSeedUsers is a helper method for testing.

Directories

Path Synopsis
extensions
useraudit
Package useraudit provides an extension for userbus that adds auditing functionality.
Package useraudit provides an extension for userbus that adds auditing functionality.
userotel
Package userotel provides an extension for userbus that adds otel tracking.
Package userotel provides an extension for userbus that adds otel tracking.
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