package projects import "senlinai-agent/backend/internal/models" // Dashboard 保留旧概览查询给尚未迁移的 handler;所有统计仍严格限定项目所有者。 func (s *Service) Dashboard(ownerID uint, projectID uint) (Dashboard, error) { if err := ensureProjectOwner(ownerID, projectID); err != nil { return Dashboard{}, err } dashboard := Dashboard{ProjectID: projectID} if err := models.DBService.Model(&models.SenlinAgentInboxItem{}).Where("project_id = ? AND status = ?", projectID, "open").Count(&dashboard.PendingInboxCount).Error; err != nil { return dashboard, err } if err := models.DBService.Model(&models.SenlinAgentTask{}).Where("project_id = ? AND status <> ?", projectID, "done").Count(&dashboard.OpenTaskCount).Error; err != nil { return dashboard, err } if err := models.DBService.Model(&models.SenlinAgentNote{}).Where("project_id = ?", projectID).Count(&dashboard.RecentNoteCount).Error; err != nil { return dashboard, err } if err := models.DBService.Model(&models.SenlinAgentAISession{}).Where("project_id = ?", projectID).Count(&dashboard.RecentSessionCount).Error; err != nil { return dashboard, err } return dashboard, nil }