From 77cf180b103a664d2e44ac013600fcf02f41f1e3 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Thu, 23 Apr 2026 22:29:43 +0200 Subject: [PATCH] f-21: api: make vpc get Signed-off-by: GnomeZworc --- internal/api/agent/vpc.go | 9 ++++++++- internal/api/agent/vpcs.go | 28 +++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/internal/api/agent/vpc.go b/internal/api/agent/vpc.go index 60d614e..8151e1d 100644 --- a/internal/api/agent/vpc.go +++ b/internal/api/agent/vpc.go @@ -6,6 +6,7 @@ import ( "strings" "git.g3e.fr/syonad/two/internal/dispatcher" + "git.g3e.fr/syonad/two/pkg/db/kv" ) func (s *Server) VpcByNameHandler(w http.ResponseWriter, r *http.Request) { @@ -28,8 +29,14 @@ func (s *Server) VpcByNameHandler(w http.ResponseWriter, r *http.Request) { } func (s *Server) getVpc(w http.ResponseWriter, _ *http.Request, name string) { + state, err := kv.GetFromDB(s.db, "vpc/"+name+"/state") + if err != nil { + w.WriteHeader(http.StatusNotFound) + json.NewEncoder(w).Encode(ErrorResponse{Error: "vpc not found"}) + return + } w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(VPC{Name: name, State: "created"}) + json.NewEncoder(w).Encode(VPC{Name: name, State: state}) } func (s *Server) deleteVpc(w http.ResponseWriter, _ *http.Request, name string) { diff --git a/internal/api/agent/vpcs.go b/internal/api/agent/vpcs.go index eb633e3..a6ee70e 100644 --- a/internal/api/agent/vpcs.go +++ b/internal/api/agent/vpcs.go @@ -3,8 +3,10 @@ package agentapi import ( "encoding/json" "net/http" + "strings" "git.g3e.fr/syonad/two/internal/dispatcher" + "git.g3e.fr/syonad/two/pkg/db/kv" ) func (s *Server) VpcsHandler(w http.ResponseWriter, r *http.Request) { @@ -20,8 +22,32 @@ func (s *Server) VpcsHandler(w http.ResponseWriter, r *http.Request) { } func (s *Server) listVpcs(w http.ResponseWriter, _ *http.Request) { + entries, err := kv.ListByPrefix(s.db, "vpc/") + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + json.NewEncoder(w).Encode(ErrorResponse{Error: "failed to list vpcs"}) + return + } + vpcs := make(map[string]*VPC) + for key, value := range entries { + parts := strings.Split(key, "/") + if len(parts) != 3 { + continue + } + name := parts[1] + if _, ok := vpcs[name]; !ok { + vpcs[name] = &VPC{Name: name} + } + if parts[2] == "state" { + vpcs[name].State = value + } + } + result := make([]VPC, 0, len(vpcs)) + for _, v := range vpcs { + result = append(result, *v) + } w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode([]VPC{}) + json.NewEncoder(w).Encode(result) } func (s *Server) postVpc(w http.ResponseWriter, r *http.Request) {