package handler import ( "encoding/json" "net/http" "strconv" meilisearch "github.com/felipemarinho97/torrent-indexer/search" ) // MeilisearchHandler handles HTTP requests for Meilisearch integration. type MeilisearchHandler struct { Module *meilisearch.SearchIndexer } // NewMeilisearchHandler creates a new instance of MeilisearchHandler. func NewMeilisearchHandler(module *meilisearch.SearchIndexer) *MeilisearchHandler { return &MeilisearchHandler{Module: module} } // SearchTorrentHandler handles the searching of torrent items. func (h *MeilisearchHandler) SearchTorrentHandler(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } query := r.URL.Query().Get("q") if query == "" { http.Error(w, "Query parameter 'q' is required", http.StatusBadRequest) return } limitStr := r.URL.Query().Get("limit") limit := 10 // Default limit if limitStr != "" { var err error limit, err = strconv.Atoi(limitStr) if err != nil || limit <= 0 { http.Error(w, "Invalid limit parameter", http.StatusBadRequest) return } } results, err := h.Module.SearchTorrent(query, limit) if err != nil { http.Error(w, "Failed to search torrents", http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") if err := json.NewEncoder(w).Encode(results); err != nil { http.Error(w, "Failed to encode response", http.StatusInternalServerError) } }