Files
prompt-generator/internal/handlers/claude.go
T

90 lines
1.9 KiB
Go
Raw Normal View History

package handlers
import (
"net/http"
"prompt-generator/internal/db"
)
func GetClaudeSessions(w http.ResponseWriter, r *http.Request) {
projectName := r.URL.Query().Get("project_name")
if projectName == "" {
fail(w, 400, "project_name 参数必填")
return
}
rows, err := db.DB.Query(`
SELECT session_id, COUNT(*) as prompt_count, MAX(created_at) as last_time
FROM prompts
WHERE project_name=?
GROUP BY session_id
ORDER BY last_time DESC
LIMIT 50
`, projectName)
if err != nil {
fail(w, 500, "查询失败")
return
}
defer rows.Close()
var sessions []map[string]interface{}
for rows.Next() {
var sessionID string
var count int
var lastTime string
if err := rows.Scan(&sessionID, &count, &lastTime); err != nil {
continue
}
sessions = append(sessions, map[string]interface{}{
"session_id": sessionID,
"prompt_count": count,
"last_time": lastTime,
})
}
if sessions == nil {
sessions = []map[string]interface{}{}
}
success(w, sessions)
}
func GetClaudePrompts(w http.ResponseWriter, r *http.Request) {
sessionID := r.PathValue("session_id")
if sessionID == "" {
fail(w, 400, "session_id 必填")
return
}
rows, err := db.DB.Query(`
SELECT id, session_id, project_name, prompt, created_at
FROM prompts
WHERE session_id=?
ORDER BY created_at DESC
LIMIT 10
`, sessionID)
if err != nil {
fail(w, 500, "查询失败")
return
}
defer rows.Close()
var prompts []map[string]interface{}
for rows.Next() {
var id int64
var sid, pname, prompt, createdAt string
if err := rows.Scan(&id, &sid, &pname, &prompt, &createdAt); err != nil {
continue
}
prompts = append(prompts, map[string]interface{}{
"id": id,
"session_id": sid,
"project": pname,
"prompt": prompt,
"created_at": createdAt,
})
}
if prompts == nil {
prompts = []map[string]interface{}{}
}
success(w, prompts)
}