Files
ServiceManager/backend/handlers/node_handler.go

79 lines
1.6 KiB
Go

package handlers
import (
"backend/models"
"backend/repositories"
"encoding/json"
"log"
"net/http"
"github.com/gin-gonic/gin"
"github.com/gorilla/mux"
)
type NodeHandler struct {
Repo *repositories.NodeRepository
}
var registeredNodes = make(map[string]models.NodeInfo)
func (h *NodeHandler) HandleRegisterNode(c *gin.Context) {
var node models.NodeInfo
if err := c.ShouldBindJSON(&node); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
nodeID, err := h.Repo.RegisterNode(node)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"id": nodeID})
}
func (h *NodeHandler) HandleRetrieveNodeList(c *gin.Context) {
log.Println("All nodes retrieved request")
registeredNodes, err := h.Repo.RetriveNodeList()
if err != nil {
log.Printf("Request error on retrieving all nodes: %v", err)
c.JSON(http.StatusInternalServerError, gin.H{"error": "Impossible de récupérer la liste des nœuds"})
return
}
log.Printf("nb nodes: %v", len(registeredNodes))
c.JSON(http.StatusOK, registeredNodes)
}
func HandleRetrieveNode(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, "GET requested", http.StatusMethodNotAllowed)
return
}
w.Header().Set("Content-Type", "application/json")
params := mux.Vars(r)
nodeID := params["id"]
node, found := registeredNodes[nodeID]
if found {
json.NewEncoder(w).Encode(node)
} else {
w.WriteHeader(http.StatusNotFound)
errorResponse := map[string]string{"error": "Node non trouvé", "id": nodeID}
json.NewEncoder(w).Encode(errorResponse)
}
}
func UpdateNodes() {
}