package handlers import ( "net/http" "github.com/gin-gonic/gin" "chat-switchboard/models" ) // ── Extension Dependencies (v0.38.2) ────────────────── // 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}) }