mirror of
https://github.com/Warky-Devs/ResolveSpec.git
synced 2025-09-13 17:01:30 +00:00
135 lines
4.0 KiB
Go
135 lines
4.0 KiB
Go
package resolvespec
|
|
|
|
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
|
|
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
|
|
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
|
|
} |