Add IP field, ping service, status endpoint and UI; update README

This commit is contained in:
2025-08-21 14:37:07 +02:00
parent 4a56cbd310
commit 504ca23442
8 changed files with 248 additions and 28 deletions

View File

@@ -3,6 +3,7 @@ package handlers
import (
"medi-wol/internal/database"
"medi-wol/internal/models"
"medi-wol/internal/ping"
"medi-wol/internal/wol"
"net/http"
"strconv"
@@ -12,15 +13,17 @@ import (
// PCHandler verwaltet die HTTP-Anfragen für PC-Operationen
type PCHandler struct {
db *database.DB
wolService *wol.Service
db *database.DB
wolService *wol.Service
pingService *ping.PingService
}
// NewPCHandler erstellt einen neuen PC-Handler
func NewPCHandler(db *database.DB, wolService *wol.Service) *PCHandler {
return &PCHandler{
db: db,
wolService: wolService,
db: db,
wolService: wolService,
pingService: ping.NewPingService(),
}
}
@@ -69,7 +72,7 @@ func (h *PCHandler) CreatePC(c *gin.Context) {
}
// PC erstellen
pc, err := h.db.CreatePC(req.Name, req.MAC)
pc, err := h.db.CreatePC(req.Name, req.MAC, req.IP)
if err != nil {
c.JSON(http.StatusInternalServerError, models.PCResponse{
Success: false,
@@ -116,7 +119,7 @@ func (h *PCHandler) UpdatePC(c *gin.Context) {
}
// PC aktualisieren
pc, err := h.db.UpdatePC(id, req.Name, req.MAC)
pc, err := h.db.UpdatePC(id, req.Name, req.MAC, req.IP)
if err != nil {
c.JSON(http.StatusInternalServerError, models.PCResponse{
Success: false,
@@ -196,3 +199,33 @@ func (h *PCHandler) WakePC(c *gin.Context) {
Message: "Wake-on-LAN Paket erfolgreich gesendet an " + pc.Name,
})
}
// GetPCStatus gibt den Online-Status aller PCs zurück
func (h *PCHandler) GetPCStatus(c *gin.Context) {
pcs, err := h.db.GetAllPCs()
if err != nil {
c.JSON(http.StatusInternalServerError, models.PCResponse{
Success: false,
Message: "Fehler beim Laden der PCs: " + err.Error(),
})
return
}
// Online-Status für alle PCs überprüfen
var statusList []models.PCStatus
for _, pc := range pcs {
online := h.pingService.IsOnline(pc.IP)
statusList = append(statusList, models.PCStatus{
ID: pc.ID,
Name: pc.Name,
MAC: pc.MAC,
IP: pc.IP,
Online: online,
})
}
c.JSON(http.StatusOK, gin.H{
"success": true,
"status": statusList,
})
}