63 lines
1.4 KiB
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),
|
|
})
|
|
}
|