mirror of
https://github.com/lordmathis/lemma.git
synced 2025-11-05 15:44:21 +00:00
Replace interface{} with any
This commit is contained in:
@@ -15,8 +15,8 @@ func TestDefaultConfig(t *testing.T) {
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
got interface{}
|
||||
expected interface{}
|
||||
got any
|
||||
expected any
|
||||
}{
|
||||
{"DBPath", cfg.DBURL, "sqlite://lemma.db"},
|
||||
{"WorkDir", cfg.WorkDir, "./data"},
|
||||
@@ -119,8 +119,8 @@ func TestLoad(t *testing.T) {
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
got interface{}
|
||||
expected interface{}
|
||||
got any
|
||||
expected any
|
||||
}{
|
||||
{"IsDevelopment", cfg.IsDevelopment, true},
|
||||
{"DBURL", cfg.DBURL, "/custom/db/path.db"},
|
||||
|
||||
@@ -112,7 +112,7 @@ func (s *jwtService) generateToken(userID int, role string, sessionID string, to
|
||||
func (s *jwtService) ValidateToken(tokenString string) (*Claims, error) {
|
||||
log := getJWTLogger()
|
||||
|
||||
token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) {
|
||||
token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (any, error) {
|
||||
// Validate the signing method
|
||||
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
|
||||
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
|
||||
|
||||
@@ -16,7 +16,7 @@ const (
|
||||
// Query represents a SQL query with its parameters
|
||||
type Query struct {
|
||||
builder strings.Builder
|
||||
args []interface{}
|
||||
args []any
|
||||
dbType DBType
|
||||
pos int // tracks the current placeholder position
|
||||
hasSelect bool
|
||||
@@ -35,7 +35,7 @@ type Query struct {
|
||||
func NewQuery(dbType DBType) *Query {
|
||||
return &Query{
|
||||
dbType: dbType,
|
||||
args: make([]interface{}, 0),
|
||||
args: make([]any, 0),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,7 +234,7 @@ func (q *Query) Write(s string) *Query {
|
||||
}
|
||||
|
||||
// Placeholder adds a placeholder for a single argument
|
||||
func (q *Query) Placeholder(arg interface{}) *Query {
|
||||
func (q *Query) Placeholder(arg any) *Query {
|
||||
q.pos++
|
||||
q.args = append(q.args, arg)
|
||||
|
||||
@@ -265,7 +265,7 @@ func (q *Query) Placeholders(n int) *Query {
|
||||
}
|
||||
|
||||
// AddArgs adds arguments to the query
|
||||
func (q *Query) AddArgs(args ...interface{}) *Query {
|
||||
func (q *Query) AddArgs(args ...any) *Query {
|
||||
q.args = append(q.args, args...)
|
||||
return q
|
||||
}
|
||||
@@ -276,6 +276,6 @@ func (q *Query) String() string {
|
||||
}
|
||||
|
||||
// Args returns the query arguments
|
||||
func (q *Query) Args() []interface{} {
|
||||
func (q *Query) Args() []any {
|
||||
return q.args
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
||||
dbType db.DBType
|
||||
buildFn func(*db.Query) *db.Query
|
||||
wantSQL string
|
||||
wantArgs []interface{}
|
||||
wantArgs []any
|
||||
}{
|
||||
{
|
||||
name: "Simple select SQLite",
|
||||
@@ -65,7 +65,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
||||
return q.Select("id", "name").From("users")
|
||||
},
|
||||
wantSQL: "SELECT id, name FROM users",
|
||||
wantArgs: []interface{}{},
|
||||
wantArgs: []any{},
|
||||
},
|
||||
{
|
||||
name: "Simple select Postgres",
|
||||
@@ -74,7 +74,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
||||
return q.Select("id", "name").From("users")
|
||||
},
|
||||
wantSQL: "SELECT id, name FROM users",
|
||||
wantArgs: []interface{}{},
|
||||
wantArgs: []any{},
|
||||
},
|
||||
{
|
||||
name: "Select with where SQLite",
|
||||
@@ -83,7 +83,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
||||
return q.Select("id", "name").From("users").Where("id = ").Placeholder(1)
|
||||
},
|
||||
wantSQL: "SELECT id, name FROM users WHERE id = ?",
|
||||
wantArgs: []interface{}{1},
|
||||
wantArgs: []any{1},
|
||||
},
|
||||
{
|
||||
name: "Select with where Postgres",
|
||||
@@ -92,7 +92,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
||||
return q.Select("id", "name").From("users").Where("id = ").Placeholder(1)
|
||||
},
|
||||
wantSQL: "SELECT id, name FROM users WHERE id = $1",
|
||||
wantArgs: []interface{}{1},
|
||||
wantArgs: []any{1},
|
||||
},
|
||||
{
|
||||
name: "Multiple where conditions SQLite",
|
||||
@@ -103,7 +103,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
||||
And("role = ").Placeholder("admin")
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE active = ? AND role = ?",
|
||||
wantArgs: []interface{}{true, "admin"},
|
||||
wantArgs: []any{true, "admin"},
|
||||
},
|
||||
{
|
||||
name: "Multiple where conditions Postgres",
|
||||
@@ -114,7 +114,7 @@ func TestBasicQueryBuilding(t *testing.T) {
|
||||
And("role = ").Placeholder("admin")
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE active = $1 AND role = $2",
|
||||
wantArgs: []interface{}{true, "admin"},
|
||||
wantArgs: []any{true, "admin"},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@ func TestPlaceholders(t *testing.T) {
|
||||
dbType db.DBType
|
||||
buildFn func(*db.Query) *db.Query
|
||||
wantSQL string
|
||||
wantArgs []interface{}
|
||||
wantArgs []any
|
||||
}{
|
||||
{
|
||||
name: "Single placeholder SQLite",
|
||||
@@ -152,7 +152,7 @@ func TestPlaceholders(t *testing.T) {
|
||||
return q.Write("SELECT * FROM users WHERE id = ").Placeholder(42)
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE id = ?",
|
||||
wantArgs: []interface{}{42},
|
||||
wantArgs: []any{42},
|
||||
},
|
||||
{
|
||||
name: "Single placeholder Postgres",
|
||||
@@ -161,7 +161,7 @@ func TestPlaceholders(t *testing.T) {
|
||||
return q.Write("SELECT * FROM users WHERE id = ").Placeholder(42)
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE id = $1",
|
||||
wantArgs: []interface{}{42},
|
||||
wantArgs: []any{42},
|
||||
},
|
||||
{
|
||||
name: "Multiple placeholders SQLite",
|
||||
@@ -173,7 +173,7 @@ func TestPlaceholders(t *testing.T) {
|
||||
Placeholder("John")
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE id = ? AND name = ?",
|
||||
wantArgs: []interface{}{42, "John"},
|
||||
wantArgs: []any{42, "John"},
|
||||
},
|
||||
{
|
||||
name: "Multiple placeholders Postgres",
|
||||
@@ -185,7 +185,7 @@ func TestPlaceholders(t *testing.T) {
|
||||
Placeholder("John")
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE id = $1 AND name = $2",
|
||||
wantArgs: []interface{}{42, "John"},
|
||||
wantArgs: []any{42, "John"},
|
||||
},
|
||||
{
|
||||
name: "Placeholders for IN SQLite",
|
||||
@@ -197,7 +197,7 @@ func TestPlaceholders(t *testing.T) {
|
||||
AddArgs(1, 2, 3)
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE id IN (?, ?, ?)",
|
||||
wantArgs: []interface{}{1, 2, 3},
|
||||
wantArgs: []any{1, 2, 3},
|
||||
},
|
||||
{
|
||||
name: "Placeholders for IN Postgres",
|
||||
@@ -209,7 +209,7 @@ func TestPlaceholders(t *testing.T) {
|
||||
AddArgs(1, 2, 3)
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE id IN ($1, $2, $3)",
|
||||
wantArgs: []interface{}{1, 2, 3},
|
||||
wantArgs: []any{1, 2, 3},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -238,7 +238,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
||||
dbType db.DBType
|
||||
buildFn func(*db.Query) *db.Query
|
||||
wantSQL string
|
||||
wantArgs []interface{}
|
||||
wantArgs []any
|
||||
}{
|
||||
{
|
||||
name: "Simple where",
|
||||
@@ -247,7 +247,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
||||
return q.Select("*").From("users").Where("id = ").Placeholder(1)
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE id = ?",
|
||||
wantArgs: []interface{}{1},
|
||||
wantArgs: []any{1},
|
||||
},
|
||||
{
|
||||
name: "Where with And",
|
||||
@@ -258,7 +258,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
||||
And("active = ").Placeholder(true)
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE id = ? AND active = ?",
|
||||
wantArgs: []interface{}{1, true},
|
||||
wantArgs: []any{1, true},
|
||||
},
|
||||
{
|
||||
name: "Where with Or",
|
||||
@@ -269,7 +269,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
||||
Or("id = ").Placeholder(2)
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE id = ? OR id = ?",
|
||||
wantArgs: []interface{}{1, 2},
|
||||
wantArgs: []any{1, 2},
|
||||
},
|
||||
{
|
||||
name: "Where with parentheses",
|
||||
@@ -283,7 +283,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
||||
Write(")")
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE active = ? AND (id = ? OR id = ?)",
|
||||
wantArgs: []interface{}{true, 1, 2},
|
||||
wantArgs: []any{true, 1, 2},
|
||||
},
|
||||
{
|
||||
name: "Where with StartGroup and EndGroup",
|
||||
@@ -297,7 +297,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
||||
Write(")")
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE active = ? AND (id = ? OR id = ?)",
|
||||
wantArgs: []interface{}{true, 1, 2},
|
||||
wantArgs: []any{true, 1, 2},
|
||||
},
|
||||
{
|
||||
name: "Where with nested groups",
|
||||
@@ -311,7 +311,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
||||
And("created_at > ").Placeholder("2020-01-01")
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE (active = ? OR role = ?) AND created_at > ?",
|
||||
wantArgs: []interface{}{true, "admin", "2020-01-01"},
|
||||
wantArgs: []any{true, "admin", "2020-01-01"},
|
||||
},
|
||||
{
|
||||
name: "WhereIn",
|
||||
@@ -322,7 +322,7 @@ func TestWhereClauseBuilding(t *testing.T) {
|
||||
AddArgs(1, 2, 3)
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE id IN (?, ?, ?)",
|
||||
wantArgs: []interface{}{1, 2, 3},
|
||||
wantArgs: []any{1, 2, 3},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -351,7 +351,7 @@ func TestJoinClauseBuilding(t *testing.T) {
|
||||
dbType db.DBType
|
||||
buildFn func(*db.Query) *db.Query
|
||||
wantSQL string
|
||||
wantArgs []interface{}
|
||||
wantArgs []any
|
||||
}{
|
||||
{
|
||||
name: "Inner join",
|
||||
@@ -362,7 +362,7 @@ func TestJoinClauseBuilding(t *testing.T) {
|
||||
Join(db.InnerJoin, "workspaces w", "w.user_id = u.id")
|
||||
},
|
||||
wantSQL: "SELECT u.*, w.name FROM users u INNER JOIN workspaces w ON w.user_id = u.id",
|
||||
wantArgs: []interface{}{},
|
||||
wantArgs: []any{},
|
||||
},
|
||||
{
|
||||
name: "Left join",
|
||||
@@ -373,7 +373,7 @@ func TestJoinClauseBuilding(t *testing.T) {
|
||||
Join(db.LeftJoin, "workspaces w", "w.user_id = u.id")
|
||||
},
|
||||
wantSQL: "SELECT u.*, w.name FROM users u LEFT JOIN workspaces w ON w.user_id = u.id",
|
||||
wantArgs: []interface{}{},
|
||||
wantArgs: []any{},
|
||||
},
|
||||
{
|
||||
name: "Multiple joins",
|
||||
@@ -385,7 +385,7 @@ func TestJoinClauseBuilding(t *testing.T) {
|
||||
Join(db.LeftJoin, "settings s", "s.user_id = u.id")
|
||||
},
|
||||
wantSQL: "SELECT u.*, w.name, s.role FROM users u INNER JOIN workspaces w ON w.user_id = u.id LEFT JOIN settings s ON s.user_id = u.id",
|
||||
wantArgs: []interface{}{},
|
||||
wantArgs: []any{},
|
||||
},
|
||||
{
|
||||
name: "Join with where",
|
||||
@@ -397,7 +397,7 @@ func TestJoinClauseBuilding(t *testing.T) {
|
||||
Where("u.active = ").Placeholder(true)
|
||||
},
|
||||
wantSQL: "SELECT u.*, w.name FROM users u INNER JOIN workspaces w ON w.user_id = u.id WHERE u.active = ?",
|
||||
wantArgs: []interface{}{true},
|
||||
wantArgs: []any{true},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -426,7 +426,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
||||
dbType db.DBType
|
||||
buildFn func(*db.Query) *db.Query
|
||||
wantSQL string
|
||||
wantArgs []interface{}
|
||||
wantArgs []any
|
||||
}{
|
||||
{
|
||||
name: "Order by",
|
||||
@@ -435,7 +435,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
||||
return q.Select("*").From("users").OrderBy("name ASC")
|
||||
},
|
||||
wantSQL: "SELECT * FROM users ORDER BY name ASC",
|
||||
wantArgs: []interface{}{},
|
||||
wantArgs: []any{},
|
||||
},
|
||||
{
|
||||
name: "Order by multiple columns",
|
||||
@@ -444,7 +444,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
||||
return q.Select("*").From("users").OrderBy("name ASC", "created_at DESC")
|
||||
},
|
||||
wantSQL: "SELECT * FROM users ORDER BY name ASC, created_at DESC",
|
||||
wantArgs: []interface{}{},
|
||||
wantArgs: []any{},
|
||||
},
|
||||
{
|
||||
name: "Limit",
|
||||
@@ -453,7 +453,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
||||
return q.Select("*").From("users").Limit(10)
|
||||
},
|
||||
wantSQL: "SELECT * FROM users LIMIT 10",
|
||||
wantArgs: []interface{}{},
|
||||
wantArgs: []any{},
|
||||
},
|
||||
{
|
||||
name: "Limit and offset",
|
||||
@@ -462,7 +462,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
||||
return q.Select("*").From("users").Limit(10).Offset(20)
|
||||
},
|
||||
wantSQL: "SELECT * FROM users LIMIT 10 OFFSET 20",
|
||||
wantArgs: []interface{}{},
|
||||
wantArgs: []any{},
|
||||
},
|
||||
{
|
||||
name: "Complete query with all clauses",
|
||||
@@ -476,7 +476,7 @@ func TestOrderLimitOffset(t *testing.T) {
|
||||
Offset(20)
|
||||
},
|
||||
wantSQL: "SELECT * FROM users WHERE active = ? ORDER BY name ASC LIMIT 10 OFFSET 20",
|
||||
wantArgs: []interface{}{true},
|
||||
wantArgs: []any{true},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -505,7 +505,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
||||
dbType db.DBType
|
||||
buildFn func(*db.Query) *db.Query
|
||||
wantSQL string
|
||||
wantArgs []interface{}
|
||||
wantArgs []any
|
||||
}{
|
||||
{
|
||||
name: "Insert SQLite",
|
||||
@@ -516,7 +516,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
||||
AddArgs("John", "john@example.com")
|
||||
},
|
||||
wantSQL: "INSERT INTO users (name, email) VALUES (?, ?)",
|
||||
wantArgs: []interface{}{"John", "john@example.com"},
|
||||
wantArgs: []any{"John", "john@example.com"},
|
||||
},
|
||||
{
|
||||
name: "Insert Postgres",
|
||||
@@ -527,7 +527,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
||||
AddArgs("John", "john@example.com")
|
||||
},
|
||||
wantSQL: "INSERT INTO users (name, email) VALUES ($1, $2)",
|
||||
wantArgs: []interface{}{"John", "john@example.com"},
|
||||
wantArgs: []any{"John", "john@example.com"},
|
||||
},
|
||||
{
|
||||
name: "Update SQLite",
|
||||
@@ -539,7 +539,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
||||
Where("id = ").Placeholder(1)
|
||||
},
|
||||
wantSQL: "UPDATE users SET name = ?, email = ? WHERE id = ?",
|
||||
wantArgs: []interface{}{"John", "john@example.com", 1},
|
||||
wantArgs: []any{"John", "john@example.com", 1},
|
||||
},
|
||||
{
|
||||
name: "Update Postgres",
|
||||
@@ -551,7 +551,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
||||
Where("id = ").Placeholder(1)
|
||||
},
|
||||
wantSQL: "UPDATE users SET name = $1, email = $2 WHERE id = $3",
|
||||
wantArgs: []interface{}{"John", "john@example.com", 1},
|
||||
wantArgs: []any{"John", "john@example.com", 1},
|
||||
},
|
||||
{
|
||||
name: "Delete SQLite",
|
||||
@@ -560,7 +560,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
||||
return q.Delete().From("users").Where("id = ").Placeholder(1)
|
||||
},
|
||||
wantSQL: "DELETE FROM users WHERE id = ?",
|
||||
wantArgs: []interface{}{1},
|
||||
wantArgs: []any{1},
|
||||
},
|
||||
{
|
||||
name: "Delete Postgres",
|
||||
@@ -569,7 +569,7 @@ func TestInsertUpdateDelete(t *testing.T) {
|
||||
return q.Delete().From("users").Where("id = ").Placeholder(1)
|
||||
},
|
||||
wantSQL: "DELETE FROM users WHERE id = $1",
|
||||
wantArgs: []interface{}{1},
|
||||
wantArgs: []any{1},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -598,7 +598,7 @@ func TestHavingClause(t *testing.T) {
|
||||
dbType db.DBType
|
||||
buildFn func(*db.Query) *db.Query
|
||||
wantSQL string
|
||||
wantArgs []interface{}
|
||||
wantArgs []any
|
||||
}{
|
||||
{
|
||||
name: "Simple having",
|
||||
@@ -610,7 +610,7 @@ func TestHavingClause(t *testing.T) {
|
||||
Having("count > ").Placeholder(5)
|
||||
},
|
||||
wantSQL: "SELECT department, COUNT(*) as count FROM employees GROUP BY department HAVING count > ?",
|
||||
wantArgs: []interface{}{5},
|
||||
wantArgs: []any{5},
|
||||
},
|
||||
{
|
||||
name: "Having with multiple conditions",
|
||||
@@ -623,7 +623,7 @@ func TestHavingClause(t *testing.T) {
|
||||
And("COUNT(*) > ").Placeholder(3)
|
||||
},
|
||||
wantSQL: "SELECT department, AVG(salary) as avg_salary FROM employees GROUP BY department HAVING avg_salary > ? AND COUNT(*) > ?",
|
||||
wantArgs: []interface{}{50000, 3},
|
||||
wantArgs: []any{50000, 3},
|
||||
},
|
||||
{
|
||||
name: "Having with postgres placeholders",
|
||||
@@ -635,7 +635,7 @@ func TestHavingClause(t *testing.T) {
|
||||
Having("count > ").Placeholder(5)
|
||||
},
|
||||
wantSQL: "SELECT department, COUNT(*) as count FROM employees GROUP BY department HAVING count > $1",
|
||||
wantArgs: []interface{}{5},
|
||||
wantArgs: []any{5},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -664,7 +664,7 @@ func TestComplexQueries(t *testing.T) {
|
||||
dbType db.DBType
|
||||
buildFn func(*db.Query) *db.Query
|
||||
wantSQL string
|
||||
wantArgs []interface{}
|
||||
wantArgs []any
|
||||
}{
|
||||
{
|
||||
name: "Complex select with join and where",
|
||||
@@ -680,7 +680,7 @@ func TestComplexQueries(t *testing.T) {
|
||||
Limit(10)
|
||||
},
|
||||
wantSQL: "SELECT u.id, u.name, COUNT(w.id) as workspace_count FROM users u LEFT JOIN workspaces w ON w.user_id = u.id WHERE u.active = ? GROUP BY u.id, u.name HAVING COUNT(w.id) > ? ORDER BY workspace_count DESC LIMIT 10",
|
||||
wantArgs: []interface{}{true, 0},
|
||||
wantArgs: []any{true, 0},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ func NewScanner(db *sql.DB, dbType DBType) *Scanner {
|
||||
}
|
||||
|
||||
// QueryRow executes a query and scans the result into a struct
|
||||
func (s *Scanner) QueryRow(dest interface{}, q *Query) error {
|
||||
func (s *Scanner) QueryRow(dest any, q *Query) error {
|
||||
row := s.db.QueryRow(q.String(), q.Args()...)
|
||||
|
||||
// Handle primitive types
|
||||
@@ -46,7 +46,7 @@ func (s *Scanner) QueryRow(dest interface{}, q *Query) error {
|
||||
}
|
||||
|
||||
// Query executes a query and scans multiple results into a slice of structs
|
||||
func (s *Scanner) Query(dest interface{}, q *Query) error {
|
||||
func (s *Scanner) Query(dest any, q *Query) error {
|
||||
rows, err := s.db.Query(q.String(), q.Args()...)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -57,7 +57,7 @@ func (s *Scanner) Query(dest interface{}, q *Query) error {
|
||||
}
|
||||
|
||||
// scanStruct scans a single row into a struct
|
||||
func scanStruct(row *sql.Row, dest interface{}) error {
|
||||
func scanStruct(row *sql.Row, dest any) error {
|
||||
v := reflect.ValueOf(dest)
|
||||
if v.Kind() != reflect.Ptr {
|
||||
return fmt.Errorf("dest must be a pointer")
|
||||
@@ -67,7 +67,7 @@ func scanStruct(row *sql.Row, dest interface{}) error {
|
||||
return fmt.Errorf("dest must be a pointer to a struct")
|
||||
}
|
||||
|
||||
fields := make([]interface{}, 0, v.NumField())
|
||||
fields := make([]any, 0, v.NumField())
|
||||
|
||||
for i := 0; i < v.NumField(); i++ {
|
||||
field := v.Field(i)
|
||||
@@ -80,7 +80,7 @@ func scanStruct(row *sql.Row, dest interface{}) error {
|
||||
}
|
||||
|
||||
// scanStructs scans multiple rows into a slice of structs
|
||||
func scanStructs(rows *sql.Rows, dest interface{}) error {
|
||||
func scanStructs(rows *sql.Rows, dest any) error {
|
||||
v := reflect.ValueOf(dest)
|
||||
if v.Kind() != reflect.Ptr {
|
||||
return fmt.Errorf("dest must be a pointer")
|
||||
@@ -95,7 +95,7 @@ func scanStructs(rows *sql.Rows, dest interface{}) error {
|
||||
|
||||
for rows.Next() {
|
||||
newElem := reflect.New(elemType).Elem()
|
||||
fields := make([]interface{}, 0, newElem.NumField())
|
||||
fields := make([]any, 0, newElem.NumField())
|
||||
|
||||
for i := 0; i < newElem.NumField(); i++ {
|
||||
field := newElem.Field(i)
|
||||
@@ -129,7 +129,7 @@ func NewScannerEx(db *sql.DB, dbType DBType) *ScannerEx {
|
||||
}
|
||||
|
||||
// QueryRow executes a query and scans the result into a struct
|
||||
func (s *ScannerEx) QueryRow(dest interface{}, q *Query) error {
|
||||
func (s *ScannerEx) QueryRow(dest any, q *Query) error {
|
||||
row := s.db.QueryRow(q.String(), q.Args()...)
|
||||
|
||||
// Get column names
|
||||
@@ -141,7 +141,7 @@ func (s *ScannerEx) QueryRow(dest interface{}, q *Query) error {
|
||||
}
|
||||
|
||||
// Query executes a query and scans multiple results into a slice of structs
|
||||
func (s *ScannerEx) Query(dest interface{}, q *Query) error {
|
||||
func (s *ScannerEx) Query(dest any, q *Query) error {
|
||||
rows, err := s.db.Query(q.String(), q.Args()...)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -189,7 +189,7 @@ func toSnakeCase(s string) string {
|
||||
}
|
||||
|
||||
// scanStructTags scans a single row into a struct using field tags
|
||||
func scanStructTags(row *sql.Row, dest interface{}) error {
|
||||
func scanStructTags(row *sql.Row, dest any) error {
|
||||
v := reflect.ValueOf(dest)
|
||||
if v.Kind() != reflect.Ptr {
|
||||
return fmt.Errorf("dest must be a pointer")
|
||||
@@ -199,7 +199,7 @@ func scanStructTags(row *sql.Row, dest interface{}) error {
|
||||
return fmt.Errorf("dest must be a pointer to a struct")
|
||||
}
|
||||
|
||||
fields := make([]interface{}, 0, v.NumField())
|
||||
fields := make([]any, 0, v.NumField())
|
||||
|
||||
for i := 0; i < v.NumField(); i++ {
|
||||
field := v.Field(i)
|
||||
@@ -212,7 +212,7 @@ func scanStructTags(row *sql.Row, dest interface{}) error {
|
||||
}
|
||||
|
||||
// scanStructsTags scans multiple rows into a slice of structs using field tags
|
||||
func scanStructsTags(rows *sql.Rows, dest interface{}) error {
|
||||
func scanStructsTags(rows *sql.Rows, dest any) error {
|
||||
v := reflect.ValueOf(dest)
|
||||
if v.Kind() != reflect.Ptr {
|
||||
return fmt.Errorf("dest must be a pointer")
|
||||
@@ -243,8 +243,8 @@ func scanStructsTags(rows *sql.Rows, dest interface{}) error {
|
||||
fieldMap := getFieldMap(elemType)
|
||||
|
||||
// Prepare values slice for each scan
|
||||
values := make([]interface{}, len(columns))
|
||||
scanFields := make([]interface{}, len(columns))
|
||||
values := make([]any, len(columns))
|
||||
scanFields := make([]any, len(columns))
|
||||
for i := range values {
|
||||
scanFields[i] = &values[i]
|
||||
}
|
||||
|
||||
@@ -308,7 +308,7 @@ func (h *Handler) AdminUpdateUser() http.HandlerFunc {
|
||||
}
|
||||
|
||||
// Track what's being updated for logging
|
||||
updates := make(map[string]interface{})
|
||||
updates := make(map[string]any)
|
||||
|
||||
if req.Email != "" {
|
||||
user.Email = req.Email
|
||||
|
||||
@@ -192,7 +192,7 @@ func TestFileHandlers_Integration(t *testing.T) {
|
||||
name string
|
||||
method string
|
||||
path string
|
||||
body interface{}
|
||||
body any
|
||||
}{
|
||||
{"list files", http.MethodGet, baseURL, nil},
|
||||
{"get file", http.MethodGet, baseURL + "/test.md", nil},
|
||||
|
||||
@@ -123,7 +123,7 @@ func TestGitHandlers_Integration(t *testing.T) {
|
||||
name string
|
||||
method string
|
||||
path string
|
||||
body interface{}
|
||||
body any
|
||||
}{
|
||||
{
|
||||
name: "commit without token",
|
||||
|
||||
@@ -37,7 +37,7 @@ func NewHandler(db db.Database, s storage.Manager) *Handler {
|
||||
}
|
||||
|
||||
// respondJSON is a helper to send JSON responses
|
||||
func respondJSON(w http.ResponseWriter, data interface{}) {
|
||||
func respondJSON(w http.ResponseWriter, data any) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
if err := json.NewEncoder(w).Encode(data); err != nil {
|
||||
respondError(w, "Failed to encode response", http.StatusInternalServerError)
|
||||
|
||||
@@ -195,7 +195,7 @@ func (h *testHarness) createTestUser(t *testing.T, email, password string, role
|
||||
}
|
||||
}
|
||||
|
||||
func (h *testHarness) newRequest(t *testing.T, method, path string, body interface{}) *http.Request {
|
||||
func (h *testHarness) newRequest(t *testing.T, method, path string, body any) *http.Request {
|
||||
t.Helper()
|
||||
|
||||
var reqBody []byte
|
||||
@@ -246,7 +246,7 @@ func (h *testHarness) addCSRFCookie(t *testing.T, req *http.Request) string {
|
||||
}
|
||||
|
||||
// makeRequest is the main helper for making JSON requests
|
||||
func (h *testHarness) makeRequest(t *testing.T, method, path string, body interface{}, testUser *testUser) *httptest.ResponseRecorder {
|
||||
func (h *testHarness) makeRequest(t *testing.T, method, path string, body any, testUser *testUser) *httptest.ResponseRecorder {
|
||||
t.Helper()
|
||||
|
||||
req := h.newRequest(t, method, path, body)
|
||||
|
||||
@@ -37,7 +37,7 @@ func (m MockDirInfo) Size() int64 { return m.size }
|
||||
func (m MockDirInfo) Mode() fs.FileMode { return m.mode }
|
||||
func (m MockDirInfo) ModTime() time.Time { return m.modTime }
|
||||
func (m MockDirInfo) IsDir() bool { return m.isDir }
|
||||
func (m MockDirInfo) Sys() interface{} { return nil }
|
||||
func (m MockDirInfo) Sys() any { return nil }
|
||||
|
||||
type mockFS struct {
|
||||
// Record operations for verification
|
||||
|
||||
Reference in New Issue
Block a user