package rest import ( "fmt" "net/http" ) // handleSearch handles GET /api/v1/search func (s *Server) handleSearch(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { writeMethodNotAllowed(w) return } if !s.requireDB(w) { return } query := r.URL.Query().Get("q") if query == "" { writeValidationError(w, fmt.Errorf("search query required")) return } // Validate and determine search type searchType, value, err := validateSearchQuery(query) if err != nil { writeValidationError(w, err) return } // Route to appropriate handler based on search type switch searchType { case "block": blockNumber, err := validateBlockNumber(value) if err != nil { writeValidationError(w, err) return } s.handleGetBlockByNumber(w, r, blockNumber) case "transaction": if !isValidHash(value) { writeValidationError(w, ErrInvalidHash) return } s.handleGetTransactionByHash(w, r, value) case "address": if !isValidAddress(value) { writeValidationError(w, ErrInvalidAddress) return } r.URL.RawQuery = "address=" + value s.handleGetAddress(w, r) default: writeValidationError(w, fmt.Errorf("unsupported search type")) } }