feat: initial implementation of EnvGuard with improved TUI layout
This commit is contained in:
67
internal/api/client.go
Normal file
67
internal/api/client.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"envguard/internal/models"
|
||||
)
|
||||
|
||||
const baseURL = "http://localhost:8080"
|
||||
|
||||
var client = &http.Client{Timeout: 5 * time.Second}
|
||||
|
||||
func GetServices() ([]models.Service, error) {
|
||||
resp, err := client.Get(baseURL + "/services")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
var services []models.Service
|
||||
if err := json.NewDecoder(resp.Body).Decode(&services); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return services, nil
|
||||
}
|
||||
|
||||
func LockService(serviceName, user string) error {
|
||||
reqBody := models.LockRequest{
|
||||
ServiceName: serviceName,
|
||||
User: user,
|
||||
}
|
||||
data, _ := json.Marshal(reqBody)
|
||||
|
||||
resp, err := client.Post(baseURL+"/lock", "application/json", bytes.NewBuffer(data))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return fmt.Errorf("failed to lock: status %d", resp.StatusCode)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func UnlockService(serviceName, user string) error {
|
||||
reqBody := models.UnlockRequest{
|
||||
ServiceName: serviceName,
|
||||
User: user,
|
||||
}
|
||||
data, _ := json.Marshal(reqBody)
|
||||
|
||||
resp, err := client.Post(baseURL+"/unlock", "application/json", bytes.NewBuffer(data))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return fmt.Errorf("failed to unlock: status %d", resp.StatusCode)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
23
internal/models/models.go
Normal file
23
internal/models/models.go
Normal file
@@ -0,0 +1,23 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// Service represents a microservice that can be locked.
|
||||
type Service struct {
|
||||
Name string `json:"name"`
|
||||
IsLocked bool `json:"is_locked"`
|
||||
LockedBy string `json:"locked_by,omitempty"`
|
||||
LockedAt time.Time `json:"locked_at,omitempty"`
|
||||
}
|
||||
|
||||
// LockRequest is the payload to lock a service.
|
||||
type LockRequest struct {
|
||||
ServiceName string `json:"service_name"`
|
||||
User string `json:"user"`
|
||||
}
|
||||
|
||||
// UnlockRequest is the payload to unlock a service.
|
||||
type UnlockRequest struct {
|
||||
ServiceName string `json:"service_name"`
|
||||
User string `json:"user"`
|
||||
}
|
||||
Reference in New Issue
Block a user