core

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Nov 22, 2025 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrValidation = errors.New("validation failed")

ErrValidation é retornado quando a validação de um modelo falha.

Functions

This section is empty.

Types

type AfterFinder

type AfterFinder interface {
	AfterFind() error
}

AfterFinder é um hook executado após buscar um registro.

type BeforeCreater

type BeforeCreater interface {
	BeforeCreate() error
}

BeforeCreater é um hook executado antes de criar um registro.

type DB

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

DB é a estrutura principal do ORM. Usa generics para type-safety.

func New

func New(sqlDB *sql.DB, dialect Dialect) *DB

New cria uma nova instância do Genus DB com logging padrão.

func NewWithLogger

func NewWithLogger(sqlDB *sql.DB, dialect Dialect, logger Logger) *DB

NewWithLogger cria uma nova instância do Genus DB com um logger customizado.

func (*DB) Create

func (db *DB) Create(ctx context.Context, model interface{}) error

Create insere um novo registro no banco de dados. T deve ter embedded Model ou implementar TableNamer.

func (*DB) Delete

func (db *DB) Delete(ctx context.Context, model interface{}) error

Delete remove um registro do banco de dados.

func (*DB) Dialect

func (db *DB) Dialect() Dialect

Dialect retorna o dialeto atual.

func (*DB) Executor

func (db *DB) Executor() Executor

Executor retorna o executor atual (útil para queries customizadas).

func (*DB) Logger

func (db *DB) Logger() Logger

Logger retorna o logger atual.

func (*DB) SetLogger

func (db *DB) SetLogger(logger Logger)

SetLogger define um novo logger.

func (*DB) Update

func (db *DB) Update(ctx context.Context, model interface{}) error

Update atualiza um registro existente.

func (*DB) WithTx

func (db *DB) WithTx(ctx context.Context, fn func(*DB) error) error

WithTx executa uma função dentro de uma transação.

type DefaultLogger

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

DefaultLogger é a implementação padrão do Logger que escreve para stdout.

func NewDefaultLogger

func NewDefaultLogger(verbose bool) *DefaultLogger

NewDefaultLogger cria um novo DefaultLogger. Se verbose for true, exibe os argumentos da query também.

func (*DefaultLogger) LogError

func (l *DefaultLogger) LogError(query string, args []interface{}, err error)

LogError registra um erro durante a execução de uma query.

func (*DefaultLogger) LogQuery

func (l *DefaultLogger) LogQuery(query string, args []interface{}, duration int64)

LogQuery registra uma query SQL executada com sucesso.

type Dialect

type Dialect interface {
	// Placeholder retorna o placeholder para a posição n (ex: $1 para PostgreSQL, ? para MySQL)
	Placeholder(n int) string

	// QuoteIdentifier adiciona aspas ao identificador (ex: "users" para PostgreSQL)
	QuoteIdentifier(name string) string

	// GetType retorna o tipo SQL para um tipo Go
	GetType(goType string) string
}

Dialect define a interface para diferentes dialetos de banco de dados. Cada dialeto (PostgreSQL, MySQL, SQLite) implementa esta interface.

type Executor

type Executor interface {
	ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
	QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)
	QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row
}

Executor é a interface que pode executar queries. Implementada por *sql.DB e *sql.Tx.

type Logger

type Logger interface {
	LogQuery(query string, args []interface{}, duration int64)
	LogError(query string, args []interface{}, err error)
}

Logger é a interface para logging de queries SQL. Implementações podem enviar logs para stdout, arquivo, ou serviços externos.

type Model

type Model struct {
	ID        int64     `db:"id"`
	CreatedAt time.Time `db:"created_at"`
	UpdatedAt time.Time `db:"updated_at"`
}

Model é a struct base que deve ser embutida em todos os modelos. Usa embedding para fornecer campos comuns.

type NoOpLogger

type NoOpLogger struct{}

NoOpLogger é um logger que não faz nada. Útil para testes ou quando você não quer logging.

func (*NoOpLogger) LogError

func (n *NoOpLogger) LogError(query string, args []interface{}, err error)

LogError não faz nada.

func (*NoOpLogger) LogQuery

func (n *NoOpLogger) LogQuery(query string, args []interface{}, duration int64)

LogQuery não faz nada.

type Optional

type Optional[T any] struct {
	// contains filtered or unexported fields
}

Optional representa um valor que pode ou não estar presente. Resolve o problema da manipulação de sql.Null* e ponteiros em JSON com uma API limpa e unificada.

Exemplo de uso:

type User struct {
    core.Model
    Name  string
    Email Optional[string] // pode ser NULL no banco
    Age   Optional[int]    // pode ser NULL no banco
}

// Criar um valor presente
email := Some("user@example.com")

// Criar um valor ausente
age := None[int]()

// Verificar se tem valor
if email.IsPresent() {
    fmt.Println(email.Get()) // user@example.com
}

// Obter com valor padrão
value := age.GetOrDefault(18) // retorna 18

func FlatMap

func FlatMap[T any, U any](o Optional[T], fn func(T) Optional[U]) Optional[U]

FlatMap aplica uma função que retorna um Optional ao valor se presente. Se o Optional estiver vazio, retorna um Optional vazio do novo tipo.

func FromPtr

func FromPtr[T any](ptr *T) Optional[T]

FromPtr cria um Optional a partir de um ponteiro. Se o ponteiro for nil, retorna None. Caso contrário, retorna Some com o valor.

func Map

func Map[T any, U any](o Optional[T], fn func(T) U) Optional[U]

Map aplica uma função ao valor se presente, retornando um novo Optional. Se o Optional estiver vazio, retorna um Optional vazio do novo tipo.

func None

func None[T any]() Optional[T]

None cria um Optional sem valor (NULL).

func Some

func Some[T any](value T) Optional[T]

Some cria um Optional com um valor presente.

func (Optional[T]) Filter

func (o Optional[T]) Filter(predicate func(T) bool) Optional[T]

Filter retorna o Optional se o predicado for verdadeiro, ou None caso contrário.

func (Optional[T]) Get

func (o Optional[T]) Get() T

Get retorna o valor contido no Optional. Entra em pânico se o Optional não contiver um valor. Use IsPresent() para verificar antes de chamar Get().

func (Optional[T]) GetOrDefault

func (o Optional[T]) GetOrDefault(defaultValue T) T

GetOrDefault retorna o valor se presente, ou o valor padrão fornecido.

func (Optional[T]) GetOrZero

func (o Optional[T]) GetOrZero() T

GetOrZero retorna o valor se presente, ou o valor zero do tipo.

func (Optional[T]) IfPresent

func (o Optional[T]) IfPresent(fn func(T))

IfPresent executa uma função se o Optional contiver um valor.

func (Optional[T]) IfPresentOrElse

func (o Optional[T]) IfPresentOrElse(fnPresent func(T), fnAbsent func())

IfPresentOrElse executa fnPresent se o Optional contiver um valor, ou fnAbsent caso contrário.

func (Optional[T]) IsAbsent

func (o Optional[T]) IsAbsent() bool

IsAbsent retorna true se o Optional não contém um valor.

func (Optional[T]) IsPresent

func (o Optional[T]) IsPresent() bool

IsPresent retorna true se o Optional contém um valor.

func (Optional[T]) MarshalJSON

func (o Optional[T]) MarshalJSON() ([]byte, error)

MarshalJSON implementa json.Marshaler. Se o Optional estiver vazio, serializa como null. Caso contrário, serializa o valor contido.

func (Optional[T]) Ptr

func (o Optional[T]) Ptr() *T

Ptr retorna um ponteiro para o valor se presente, ou nil.

func (*Optional[T]) Scan

func (o *Optional[T]) Scan(value any) error

Scan implementa sql.Scanner para permitir scan direto do banco de dados.

func (*Optional[T]) UnmarshalJSON

func (o *Optional[T]) UnmarshalJSON(data []byte) error

UnmarshalJSON implementa json.Unmarshaler. Se o JSON for null, define o Optional como vazio. Caso contrário, desserializa para o valor contido.

func (Optional[T]) Value

func (o Optional[T]) Value() (driver.Value, error)

Value implementa driver.Valuer para permitir inserção no banco de dados.

type Scanner

type Scanner interface {
	Scan(dest ...interface{}) error
}

Scanner é a interface para tipos que podem escanear valores do banco.

type TableNamer

type TableNamer interface {
	TableName() string
}

TableNamer é uma interface que os modelos podem implementar para especificar o nome da tabela customizado.

Jump to

Keyboard shortcuts

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