Files
zeromesh/internal/handler/admin.go

63 lines
1.4 KiB
Go

package handler
import (
"net/http"
"github.com/gin-gonic/gin"
"zeromesh/internal/database"
"zeromesh/internal/model"
"zeromesh/internal/service"
)
type AdminHandler struct {
authService *service.AuthService
db *database.DB
nodeService *service.NodeService
netService *service.NetworkService
}
func NewAdminHandler(authService *service.AuthService, db *database.DB, nodeService *service.NodeService, netService *service.NetworkService) *AdminHandler {
return &AdminHandler{
authService: authService,
db: db,
nodeService: nodeService,
netService: netService,
}
}
func (h *AdminHandler) Dashboard(c *gin.Context) {
uid := userID(c)
var authorizedMembers int64
if isAdmin(c) {
h.db.Model(&model.NetworkMember{}).Where("authorized = ?", true).Count(&authorizedMembers)
} else {
networks, _ := h.netService.ListNetworks(uid)
var ids []uint32
for _, n := range networks {
ids = append(ids, n.NetworkID)
}
if len(ids) > 0 {
h.db.Model(&model.NetworkMember{}).Where("authorized = ? AND network_id IN ?", true, ids).Count(&authorizedMembers)
}
}
nodes, _ := h.nodeService.ListNode(uid)
var online int64
for _, n := range nodes {
if n.Online {
online++
}
}
networks, _ := h.netService.ListNetworks(uid)
c.JSON(http.StatusOK, gin.H{
"authorized_members": authorizedMembers,
"nodes_total": len(nodes),
"nodes_online": online,
"networks_count": len(networks),
})
}