diff options
author | Julien Dessaux | 2025-02-23 22:06:46 +0100 |
---|---|---|
committer | Julien Dessaux | 2025-02-23 22:06:46 +0100 |
commit | a83296b79ac7eb851a44600fb7ccf6c1a200e2bc (patch) | |
tree | 25d69d9c8a0b4905761d6089acacc454fecf55dd /pkg/webui/versions.go | |
parent | chore(tfstated): change database state id and version id formats to uuidv7 (diff) | |
download | tfstated-a83296b79ac7eb851a44600fb7ccf6c1a200e2bc.tar.gz tfstated-a83296b79ac7eb851a44600fb7ccf6c1a200e2bc.tar.bz2 tfstated-a83296b79ac7eb851a44600fb7ccf6c1a200e2bc.zip |
[webui] refactored states and versions routes
Diffstat (limited to 'pkg/webui/versions.go')
-rw-r--r-- | pkg/webui/versions.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/pkg/webui/versions.go b/pkg/webui/versions.go new file mode 100644 index 0000000..8cb0a8b --- /dev/null +++ b/pkg/webui/versions.go @@ -0,0 +1,61 @@ +package webui + +import ( + "html/template" + "net/http" + "path" + + "git.adyxax.org/adyxax/tfstated/pkg/database" + "git.adyxax.org/adyxax/tfstated/pkg/model" + "go.n16f.net/uuid" +) + +var versionsTemplate = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/versions.html")) + +func handleVersionsGET(db *database.DB) http.Handler { + type VersionsData struct { + Page *Page + Account *model.Account + State *model.State + Version *model.Version + VersionData string + } + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var versionId uuid.UUID + if err := versionId.Parse(r.PathValue("id")); err != nil { + errorResponse(w, http.StatusBadRequest, err) + return + } + version, err := db.LoadVersionById(versionId) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + if version == nil { + errorResponse(w, http.StatusNotFound, err) + return + } + state, err := db.LoadStateById(version.StateId) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + account, err := db.LoadAccountById(version.AccountId) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + versionData := string(version.Data[:]) + render(w, versionsTemplate, http.StatusOK, VersionsData{ + Page: makePage(r, &Page{ + Precedent: path.Join("/states/", state.Id.String()), + Section: "states", + Title: state.Path, + }), + Account: account, + State: state, + Version: version, + VersionData: versionData, + }) + }) +} |