package models import ( "database/sql" "fmt" "time" "golang.org/x/crypto/bcrypt" ) type User struct { ID int Username string PasswordHash string CreatedAt time.Time } func Authenticate(db *sql.DB, username, password string) (*User, error) { u := &User{} err := db.QueryRow( "SELECT id, username, password_hash, created_at FROM users WHERE username = ?", username, ).Scan(&u.ID, &u.Username, &u.PasswordHash, &u.CreatedAt) if err != nil { return nil, fmt.Errorf("user not found") } if err := bcrypt.CompareHashAndPassword([]byte(u.PasswordHash), []byte(password)); err != nil { return nil, fmt.Errorf("invalid password") } return u, nil }