Documentation
¶
Index ¶
- Variables
- type AfterFinder
- type BeforeCreater
- type DB
- func (db *DB) Create(ctx context.Context, model interface{}) error
- func (db *DB) Delete(ctx context.Context, model interface{}) error
- func (db *DB) Dialect() Dialect
- func (db *DB) Executor() Executor
- func (db *DB) Logger() Logger
- func (db *DB) SetLogger(logger Logger)
- func (db *DB) Update(ctx context.Context, model interface{}) error
- func (db *DB) WithTx(ctx context.Context, fn func(*DB) error) error
- type DefaultLogger
- type Dialect
- type Executor
- type Logger
- type Model
- type NoOpLogger
- type Optional
- func (o Optional[T]) Filter(predicate func(T) bool) Optional[T]
- func (o Optional[T]) Get() T
- func (o Optional[T]) GetOrDefault(defaultValue T) T
- func (o Optional[T]) GetOrZero() T
- func (o Optional[T]) IfPresent(fn func(T))
- func (o Optional[T]) IfPresentOrElse(fnPresent func(T), fnAbsent func())
- func (o Optional[T]) IsAbsent() bool
- func (o Optional[T]) IsPresent() bool
- func (o Optional[T]) MarshalJSON() ([]byte, error)
- func (o Optional[T]) Ptr() *T
- func (o *Optional[T]) Scan(value any) error
- func (o *Optional[T]) UnmarshalJSON(data []byte) error
- func (o Optional[T]) Value() (driver.Value, error)
- type Scanner
- type TableNamer
Constants ¶
This section is empty.
Variables ¶
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 NewWithLogger ¶
NewWithLogger cria uma nova instância do Genus DB com um logger customizado.
func (*DB) Create ¶
Create insere um novo registro no banco de dados. T deve ter embedded Model ou implementar TableNamer.
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 ¶
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 ¶
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 ¶
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 (Optional[T]) Filter ¶
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]) MarshalJSON ¶
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]) UnmarshalJSON ¶
UnmarshalJSON implementa json.Unmarshaler. Se o JSON for null, define o Optional como vazio. Caso contrário, desserializa para o valor contido.
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.