Changeset 0.29.0 (#195)

This commit is contained in:
2026-03-17 16:28:47 +00:00
parent 128cbb8174
commit 5d637d3a90
129 changed files with 9418 additions and 3016 deletions

View File

@@ -8,6 +8,7 @@ import (
"github.com/lib/pq"
"git.gobha.me/xcaliber/chat-switchboard/models"
"git.gobha.me/xcaliber/chat-switchboard/store"
)
// ── ProjectStore ───────────────────────────
@@ -395,6 +396,45 @@ func (s *ProjectStore) GetProjectIDForChannel(ctx context.Context, channelID str
return projectID, err
}
// ── CS5c additions (v0.29.0) ──────────────────────────────────────────
func (s *ProjectStore) AdminList(ctx context.Context, includeArchived bool) ([]store.AdminProject, error) {
rows, err := DB.QueryContext(ctx, `
SELECT p.id, p.name, p.description, p.scope,
p.owner_id, p.team_id, p.is_archived,
p.created_at, p.updated_at,
(SELECT COUNT(*) FROM project_channels WHERE project_id = p.id),
(SELECT COUNT(*) FROM project_knowledge_bases WHERE project_id = p.id),
(SELECT COUNT(*) FROM project_notes WHERE project_id = p.id),
COALESCE(u.username, '')
FROM projects p
LEFT JOIN users u ON u.id = p.owner_id
WHERE ($1 OR p.is_archived = false)
ORDER BY p.updated_at DESC`, includeArchived)
if err != nil {
return nil, err
}
defer rows.Close()
results := make([]store.AdminProject, 0)
for rows.Next() {
var p store.AdminProject
var teamID sql.NullString
if err := rows.Scan(
&p.ID, &p.Name, &p.Description, &p.Scope,
&p.OwnerID, &teamID, &p.IsArchived,
&p.CreatedAt, &p.UpdatedAt,
&p.ChannelCount, &p.KBCount, &p.NoteCount,
&p.OwnerName,
); err != nil {
return nil, err
}
p.TeamID = NullableStringPtr(teamID)
results = append(results, p)
}
return results, rows.Err()
}
// ── Query Helper ────────────────────────────
func queryProjects(ctx context.Context, q string, args ...interface{}) ([]models.Project, error) {