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

@@ -418,6 +418,52 @@ 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) {
archivedFilter := "AND p.is_archived = 0"
if includeArchived {
archivedFilter = ""
}
rows, err := DB.QueryContext(ctx, fmt.Sprintf(`
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=1 %s
ORDER BY p.updated_at DESC`, archivedFilter))
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
var archived int
if err := rows.Scan(
&p.ID, &p.Name, &p.Description, &p.Scope,
&p.OwnerID, &teamID, &archived,
st(&p.CreatedAt), st(&p.UpdatedAt),
&p.ChannelCount, &p.KBCount, &p.NoteCount,
&p.OwnerName,
); err != nil {
return nil, err
}
p.IsArchived = archived != 0
p.TeamID = NullableStringPtr(teamID)
results = append(results, p)
}
return results, rows.Err()
}
// ── Helpers ─────────────────────────────────
func boolToInt(b bool) int {