79 lines
1.6 KiB
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() {
|
|
}
|