Changeset 0.29.0 (#195)
This commit is contained in:
@@ -6,7 +6,6 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"git.gobha.me/xcaliber/chat-switchboard/database"
|
||||
"git.gobha.me/xcaliber/chat-switchboard/models"
|
||||
"git.gobha.me/xcaliber/chat-switchboard/store"
|
||||
)
|
||||
@@ -381,24 +380,11 @@ func (h *ProjectHandler) AdminList(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
includeArchived := c.Query("include_archived") == "true"
|
||||
|
||||
// Admin sees everything — query with no user scope
|
||||
rows, err := database.DB.QueryContext(ctx, database.Q(`
|
||||
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),
|
||||
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)
|
||||
projects, err := h.stores.Projects.AdminList(ctx, includeArchived)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to list projects"})
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
type adminProject struct {
|
||||
ID string `json:"id"`
|
||||
@@ -416,25 +402,25 @@ func (h *ProjectHandler) AdminList(c *gin.Context) {
|
||||
OwnerName string `json:"owner_name"`
|
||||
}
|
||||
|
||||
var projects []adminProject
|
||||
for rows.Next() {
|
||||
var p adminProject
|
||||
if err := rows.Scan(
|
||||
&p.ID, &p.Name, &p.Description, &p.Scope,
|
||||
&p.OwnerID, &p.TeamID, &p.IsArchived,
|
||||
&p.CreatedAt, &p.UpdatedAt,
|
||||
&p.ChannelCount, &p.KBCount, &p.NoteCount,
|
||||
&p.OwnerName,
|
||||
); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "scan error"})
|
||||
return
|
||||
}
|
||||
projects = append(projects, p)
|
||||
result := make([]adminProject, 0, len(projects))
|
||||
for _, p := range projects {
|
||||
result = append(result, adminProject{
|
||||
ID: p.ID,
|
||||
Name: p.Name,
|
||||
Description: p.Description,
|
||||
Scope: p.Scope,
|
||||
OwnerID: p.OwnerID,
|
||||
TeamID: p.TeamID,
|
||||
IsArchived: p.IsArchived,
|
||||
CreatedAt: p.CreatedAt.Format("2006-01-02T15:04:05Z"),
|
||||
UpdatedAt: p.UpdatedAt.Format("2006-01-02T15:04:05Z"),
|
||||
ChannelCount: p.ChannelCount,
|
||||
KBCount: p.KBCount,
|
||||
NoteCount: p.NoteCount,
|
||||
OwnerName: p.OwnerName,
|
||||
})
|
||||
}
|
||||
if projects == nil {
|
||||
projects = []adminProject{}
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{"data": projects})
|
||||
c.JSON(http.StatusOK, gin.H{"data": result})
|
||||
}
|
||||
|
||||
// ── Auth Helper ─────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user