- Rename Go module switchboard-core → armature (155+ files) - Rename Docker image → gobha/armature - Rename K8s resources, secrets, deployments - Rename Prometheus metrics switchboard_* → armature_* - Rename env vars SWITCHBOARD_ADMIN_* → ARMATURE_ADMIN_* - Rename DB names switchboard_core* → armature* - Update all frontend branding, notification templates, docs - Update CI scripts, e2e tests, Keycloak realm, nginx conf - Rename scripts/switchboard-ca.sh → scripts/armature-ca.sh - Rename k8s/switchboard.yaml → k8s/armature.yaml - Rename chart alerting/dashboard files - Fix: DockerHub push uses env: binding for secret injection - Helm chart updated (name, labels, template functions, dashboard, alerting) - Replace favicon/icon assets with Armature brand No functional changes. Pure mechanical rename + CI fix. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
70 lines
2.0 KiB
Go
70 lines
2.0 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"armature/models"
|
|
)
|
|
|
|
// ── Extension Dependencies ──────────────────
|
|
// Admin-only read endpoints for dependency graph visibility.
|
|
// Dependencies are created/deleted implicitly by InstallPackage/DeletePackage.
|
|
|
|
// ListDependencies returns all libraries that a package depends on.
|
|
// GET /api/v1/admin/packages/:id/dependencies
|
|
func (h *PackageHandler) ListDependencies(c *gin.Context) {
|
|
id := c.Param("id")
|
|
if h.stores.Dependencies == nil {
|
|
c.JSON(http.StatusOK, gin.H{"data": []any{}})
|
|
return
|
|
}
|
|
deps, err := h.stores.Dependencies.ListByConsumer(c.Request.Context(), id)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to list dependencies"})
|
|
return
|
|
}
|
|
if deps == nil {
|
|
deps = []models.ExtDependency{}
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"data": deps})
|
|
}
|
|
|
|
// ListConsumers returns all packages that depend on a library.
|
|
// GET /api/v1/admin/packages/:id/consumers
|
|
func (h *PackageHandler) ListConsumers(c *gin.Context) {
|
|
id := c.Param("id")
|
|
if h.stores.Dependencies == nil {
|
|
c.JSON(http.StatusOK, gin.H{"data": []any{}})
|
|
return
|
|
}
|
|
deps, err := h.stores.Dependencies.ListByLibrary(c.Request.Context(), id)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to list consumers"})
|
|
return
|
|
}
|
|
if deps == nil {
|
|
deps = []models.ExtDependency{}
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"data": deps})
|
|
}
|
|
|
|
// ListAllDependencies returns the full dependency graph.
|
|
// GET /api/v1/admin/dependencies
|
|
func (h *PackageHandler) ListAllDependencies(c *gin.Context) {
|
|
if h.stores.Dependencies == nil {
|
|
c.JSON(http.StatusOK, gin.H{"data": []any{}})
|
|
return
|
|
}
|
|
deps, err := h.stores.Dependencies.ListAll(c.Request.Context())
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to list dependencies"})
|
|
return
|
|
}
|
|
if deps == nil {
|
|
deps = []models.ExtDependency{}
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"data": deps})
|
|
}
|