feat: implement server persistence with services.json

This commit is contained in:
Jose Luis Montañes Ojados
2026-01-28 15:17:27 +01:00
parent 60e2b94107
commit cb704c1b1f
2 changed files with 73 additions and 8 deletions

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"log"
"net/http"
"os"
"sync"
"time"
@@ -12,6 +13,14 @@ import (
)
var (
services = []models.Service{}
mu sync.Mutex
dataFile = "services.json"
)
func main() {
if err := loadServices(); err != nil {
log.Printf("⚠️ No se pudo cargar services.json, usando defaults: %v", err)
services = []models.Service{
{Name: "auth-service"},
{Name: "payments-api"},
@@ -19,10 +28,10 @@ var (
{Name: "notifications"},
{Name: "front-web"},
}
mu sync.Mutex
)
} else {
fmt.Printf("✅ %d servicios cargados desde disco\n", len(services))
}
func main() {
http.HandleFunc("/services", handleServices)
http.HandleFunc("/lock", handleLock)
http.HandleFunc("/unlock", handleUnlock)
@@ -33,6 +42,27 @@ func main() {
}
}
func loadServices() error {
file, err := os.Open(dataFile)
if err != nil {
return err
}
defer file.Close()
return json.NewDecoder(file).Decode(&services)
}
func saveServices() error {
file, err := os.Create(dataFile)
if err != nil {
return err
}
defer file.Close()
encoder := json.NewEncoder(file)
encoder.SetIndent("", " ")
return encoder.Encode(services)
}
func handleServices(w http.ResponseWriter, r *http.Request) {
mu.Lock()
defer mu.Unlock()
@@ -66,6 +96,10 @@ func handleLock(w http.ResponseWriter, r *http.Request) {
services[i].LockedBy = req.User
services[i].LockedAt = time.Now()
if err := saveServices(); err != nil {
log.Printf("Error guardando estado: %v", err)
}
w.WriteHeader(http.StatusOK)
return
}
@@ -103,6 +137,10 @@ func handleUnlock(w http.ResponseWriter, r *http.Request) {
services[i].LockedBy = ""
services[i].LockedAt = time.Time{}
if err := saveServices(); err != nil {
log.Printf("Error guardando estado: %v", err)
}
w.WriteHeader(http.StatusOK)
return
}

27
services.json Normal file
View File

@@ -0,0 +1,27 @@
[
{
"name": "auth-service",
"is_locked": false,
"locked_at": "0001-01-01T00:00:00Z"
},
{
"name": "payments-api",
"is_locked": false,
"locked_at": "0001-01-01T00:00:00Z"
},
{
"name": "user-db",
"is_locked": false,
"locked_at": "0001-01-01T00:00:00Z"
},
{
"name": "notifications",
"is_locked": false,
"locked_at": "0001-01-01T00:00:00Z"
},
{
"name": "front-web",
"is_locked": false,
"locked_at": "0001-01-01T00:00:00Z"
}
]