feat: 扩展弹框配置重构
This commit is contained in:
@@ -2,6 +2,7 @@ package handler
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
@@ -53,6 +54,7 @@ func (h *AIHandler) Generate(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
ctx := r.Context()
|
||||
userID := ctx.Value("userID").(string)
|
||||
log.Printf("[AIHandler] Generate request from userID=%s strategy=%q provider=%q model=%q", userID, body.Strategy, body.Provider, body.Model)
|
||||
|
||||
// Fetch Product Profile Context
|
||||
var productContext string
|
||||
@@ -79,9 +81,11 @@ func (h *AIHandler) Generate(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
replyString, err := h.svc.GenerateReply(ctx, body.TweetContent, productContext, body.Identity, body.Provider, body.Model)
|
||||
if err != nil {
|
||||
log.Printf("[AIHandler] ERROR GenerateReply for userID=%s: %v", userID, err)
|
||||
SendError(w, http.StatusBadGateway, 5002, "Failed to generate AI reply: "+err.Error())
|
||||
return
|
||||
}
|
||||
log.Printf("[AIHandler] GenerateReply success for userID=%s, reply length=%d", userID, len(replyString))
|
||||
|
||||
// Clean up potential markdown wrappers from LLM output
|
||||
cleanReply := strings.TrimSpace(replyString)
|
||||
|
||||
@@ -2,6 +2,7 @@ package handler
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/zs/InsightReply/internal/repository"
|
||||
@@ -17,15 +18,18 @@ func NewTweetHandler(repo *repository.TweetRepository) *TweetHandler {
|
||||
|
||||
// GetHotTweets returns the top heating tweets spanning across all tracking targets
|
||||
func (h *TweetHandler) GetHotTweets(w http.ResponseWriter, r *http.Request) {
|
||||
// Standardize to take the top 50 hottest tweets that haven't been manually marked as processed
|
||||
log.Printf("[TweetHandler] GetHotTweets called from %s", r.RemoteAddr)
|
||||
|
||||
tweets, err := h.repo.GetTopHeatingTweets(50)
|
||||
if err != nil {
|
||||
log.Printf("[TweetHandler] ERROR GetTopHeatingTweets: %v", err)
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
json.NewEncoder(w).Encode(map[string]interface{}{"error": "failed to retrieve hot tweets"})
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("[TweetHandler] GetHotTweets returning %d tweets", len(tweets))
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(tweets)
|
||||
}
|
||||
@@ -34,15 +38,18 @@ func (h *TweetHandler) GetHotTweets(w http.ResponseWriter, r *http.Request) {
|
||||
func (h *TweetHandler) GetSearchTweets(w http.ResponseWriter, r *http.Request) {
|
||||
keyword := r.URL.Query().Get("keyword")
|
||||
handle := r.URL.Query().Get("handle")
|
||||
log.Printf("[TweetHandler] SearchTweets called: keyword=%q handle=%q", keyword, handle)
|
||||
|
||||
tweets, err := h.repo.SearchTweets(keyword, handle, 50)
|
||||
if err != nil {
|
||||
log.Printf("[TweetHandler] ERROR SearchTweets: %v", err)
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
json.NewEncoder(w).Encode(map[string]interface{}{"error": "failed to search tweets"})
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("[TweetHandler] SearchTweets returning %d tweets", len(tweets))
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(tweets)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user