fix(db): retire demo chat sessions with projects in 00046

Extend unapplied migration to mark 6001–6010 sessions demo_retired
and filter them (and retired projects) out of ListChatSessions.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
weichen
2026-09-16 03:12:25 +00:00
co-authored by Cursor
parent a44df9280c
commit fbda195b7f
5 changed files with 85 additions and 4 deletions
+9
View File
@@ -117,6 +117,8 @@ func (m *ContextManager) ListChatSessions(ctx context.Context, filter SessionFil
LEFT JOIN projects p ON s.project_id = p.id
LEFT JOIN chat_messages m ON s.session_id = m.session_id
WHERE ($1 = 0 OR s.user_id = $1) AND ($2 = 0 OR s.project_id = $2)
AND COALESCE(s.status, 'active') <> 'demo_retired'
AND COALESCE(p.status, 'active') <> 'demo_retired'
GROUP BY s.session_id, s.title, s.user_id, s.project_id, p.name, s.updated_at
ORDER BY s.updated_at DESC
LIMIT $3 OFFSET $4
@@ -148,6 +150,13 @@ func (m *ContextManager) ListChatSessions(ctx context.Context, filter SessionFil
if filter.ProjectID > 0 && sess.ProjectID != filter.ProjectID {
continue
}
status := sess.Status
if status == "" {
status = "active"
}
if status == "demo_retired" {
continue
}
all = append(all, *sess)
}
@@ -0,0 +1,45 @@
package ctxmgr
import (
"context"
"testing"
"time"
)
func TestListChatSessions_SkipsDemoRetired(t *testing.T) {
mgr := NewContextManager(nil, nil, DefaultTimeDecayConfig())
ctx := context.Background()
userID := int64(1)
active := &ChatSessionSummary{
SessionID: "sess-real-u1",
Title: "real",
UserID: userID,
ProjectID: 56,
Status: "active",
UpdatedAt: time.Now(),
}
retired := &ChatSessionSummary{
SessionID: "sess-wangjing-u1",
Title: "demo",
UserID: userID,
ProjectID: 6001,
Status: "demo_retired",
UpdatedAt: time.Now(),
}
mgr.mu.Lock()
mgr.sessions[active.SessionID] = active
mgr.sessions[retired.SessionID] = retired
mgr.mu.Unlock()
sessions, err := mgr.ListChatSessions(ctx, SessionFilter{UserID: userID, Limit: 10})
if err != nil {
t.Fatalf("ListChatSessions: %v", err)
}
if len(sessions) != 1 {
t.Fatalf("expected 1 session, got %d (%+v)", len(sessions), sessions)
}
if sessions[0].SessionID != active.SessionID {
t.Fatalf("expected %s, got %s", active.SessionID, sessions[0].SessionID)
}
}
+1
View File
@@ -208,6 +208,7 @@ type ChatSessionSummary struct {
UserID int64 `json:"user_id"`
ProjectID int64 `json:"project_id,omitempty"`
ProjectName string `json:"project_name,omitempty"`
Status string `json:"status,omitempty"` // active | demo_retired | …
MessageCount int `json:"message_count"`
LastMessage string `json:"last_message,omitempty"`
UpdatedAt time.Time `json:"updated_at"`