mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2026-01-05 03:14:25 +00:00
Massive refactor and introduction of restheadspec
This commit is contained in:
137
pkg/common/interfaces.go
Normal file
137
pkg/common/interfaces.go
Normal file
@@ -0,0 +1,137 @@
|
||||
package common
|
||||
|
||||
import "context"
|
||||
|
||||
// Database interface designed to work with both GORM and Bun
|
||||
type Database interface {
|
||||
// Core query operations
|
||||
NewSelect() SelectQuery
|
||||
NewInsert() InsertQuery
|
||||
NewUpdate() UpdateQuery
|
||||
NewDelete() DeleteQuery
|
||||
|
||||
// Raw SQL execution
|
||||
Exec(ctx context.Context, query string, args ...interface{}) (Result, error)
|
||||
Query(ctx context.Context, dest interface{}, query string, args ...interface{}) error
|
||||
|
||||
// Transaction support
|
||||
BeginTx(ctx context.Context) (Database, error)
|
||||
CommitTx(ctx context.Context) error
|
||||
RollbackTx(ctx context.Context) error
|
||||
RunInTransaction(ctx context.Context, fn func(Database) error) error
|
||||
}
|
||||
|
||||
// SelectQuery interface for building SELECT queries (compatible with both GORM and Bun)
|
||||
type SelectQuery interface {
|
||||
Model(model interface{}) SelectQuery
|
||||
Table(table string) SelectQuery
|
||||
Column(columns ...string) SelectQuery
|
||||
Where(query string, args ...interface{}) SelectQuery
|
||||
WhereOr(query string, args ...interface{}) SelectQuery
|
||||
Join(query string, args ...interface{}) SelectQuery
|
||||
LeftJoin(query string, args ...interface{}) SelectQuery
|
||||
Preload(relation string, conditions ...interface{}) SelectQuery
|
||||
Order(order string) SelectQuery
|
||||
Limit(n int) SelectQuery
|
||||
Offset(n int) SelectQuery
|
||||
Group(group string) SelectQuery
|
||||
Having(having string, args ...interface{}) SelectQuery
|
||||
|
||||
// Execution methods
|
||||
Scan(ctx context.Context, dest interface{}) error
|
||||
Count(ctx context.Context) (int, error)
|
||||
Exists(ctx context.Context) (bool, error)
|
||||
}
|
||||
|
||||
// InsertQuery interface for building INSERT queries
|
||||
type InsertQuery interface {
|
||||
Model(model interface{}) InsertQuery
|
||||
Table(table string) InsertQuery
|
||||
Value(column string, value interface{}) InsertQuery
|
||||
OnConflict(action string) InsertQuery
|
||||
Returning(columns ...string) InsertQuery
|
||||
|
||||
// Execution
|
||||
Exec(ctx context.Context) (Result, error)
|
||||
}
|
||||
|
||||
// UpdateQuery interface for building UPDATE queries
|
||||
type UpdateQuery interface {
|
||||
Model(model interface{}) UpdateQuery
|
||||
Table(table string) UpdateQuery
|
||||
Set(column string, value interface{}) UpdateQuery
|
||||
SetMap(values map[string]interface{}) UpdateQuery
|
||||
Where(query string, args ...interface{}) UpdateQuery
|
||||
Returning(columns ...string) UpdateQuery
|
||||
|
||||
// Execution
|
||||
Exec(ctx context.Context) (Result, error)
|
||||
}
|
||||
|
||||
// DeleteQuery interface for building DELETE queries
|
||||
type DeleteQuery interface {
|
||||
Model(model interface{}) DeleteQuery
|
||||
Table(table string) DeleteQuery
|
||||
Where(query string, args ...interface{}) DeleteQuery
|
||||
|
||||
// Execution
|
||||
Exec(ctx context.Context) (Result, error)
|
||||
}
|
||||
|
||||
// Result interface for query execution results
|
||||
type Result interface {
|
||||
RowsAffected() int64
|
||||
LastInsertId() (int64, error)
|
||||
}
|
||||
|
||||
// ModelRegistry manages model registration and retrieval
|
||||
type ModelRegistry interface {
|
||||
RegisterModel(name string, model interface{}) error
|
||||
GetModel(name string) (interface{}, error)
|
||||
GetAllModels() map[string]interface{}
|
||||
GetModelByEntity(schema, entity string) (interface{}, error)
|
||||
}
|
||||
|
||||
// Router interface for HTTP router abstraction
|
||||
type Router interface {
|
||||
HandleFunc(pattern string, handler HTTPHandlerFunc) RouteRegistration
|
||||
ServeHTTP(w ResponseWriter, r Request)
|
||||
}
|
||||
|
||||
// RouteRegistration allows method chaining for route configuration
|
||||
type RouteRegistration interface {
|
||||
Methods(methods ...string) RouteRegistration
|
||||
PathPrefix(prefix string) RouteRegistration
|
||||
}
|
||||
|
||||
// Request interface abstracts HTTP request
|
||||
type Request interface {
|
||||
Method() string
|
||||
URL() string
|
||||
Header(key string) string
|
||||
AllHeaders() map[string]string // Get all headers as a map
|
||||
Body() ([]byte, error)
|
||||
PathParam(key string) string
|
||||
QueryParam(key string) string
|
||||
}
|
||||
|
||||
// ResponseWriter interface abstracts HTTP response
|
||||
type ResponseWriter interface {
|
||||
SetHeader(key, value string)
|
||||
WriteHeader(statusCode int)
|
||||
Write(data []byte) (int, error)
|
||||
WriteJSON(data interface{}) error
|
||||
}
|
||||
|
||||
// HTTPHandlerFunc type for HTTP handlers
|
||||
type HTTPHandlerFunc func(ResponseWriter, Request)
|
||||
|
||||
// TableNameProvider interface for models that provide table names
|
||||
type TableNameProvider interface {
|
||||
TableName() string
|
||||
}
|
||||
|
||||
// SchemaProvider interface for models that provide schema names
|
||||
type SchemaProvider interface {
|
||||
SchemaName() string
|
||||
}
|
||||
Reference in New Issue
Block a user