diff options
author | Julien Dessaux | 2025-01-28 00:30:30 +0100 |
---|---|---|
committer | Julien Dessaux | 2025-01-28 00:30:30 +0100 |
commit | 21c8d6601a274262074e39845be24d8020d2e5aa (patch) | |
tree | cad793b4984574c0763e148fb2ac6008a11951a6 /pkg/webui/version.go | |
parent | feat(webui): implement state versions list (diff) | |
download | tfstated-21c8d6601a274262074e39845be24d8020d2e5aa.tar.gz tfstated-21c8d6601a274262074e39845be24d8020d2e5aa.tar.bz2 tfstated-21c8d6601a274262074e39845be24d8020d2e5aa.zip |
feat(webui): bootstrap state version page
Diffstat (limited to '')
-rw-r--r-- | pkg/webui/version.go | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/pkg/webui/version.go b/pkg/webui/version.go new file mode 100644 index 0000000..04c3e6d --- /dev/null +++ b/pkg/webui/version.go @@ -0,0 +1,58 @@ +package webui + +import ( + "fmt" + "html/template" + "net/http" + "strconv" + + "git.adyxax.org/adyxax/tfstated/pkg/database" + "git.adyxax.org/adyxax/tfstated/pkg/model" +) + +var versionTemplate = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/version.html")) + +func handleVersionGET(db *database.DB) http.Handler { + type VersionsData struct { + Page + Account *model.Account + State *model.State + Version *model.Version + VersionData string + } + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + versionIdStr := r.PathValue("id") + versionId, err := strconv.Atoi(versionIdStr) + if err != nil { + errorResponse(w, http.StatusBadRequest, err) + return + } + version, err := db.LoadVersionById(versionId) + if err != nil { + errorResponse(w, http.StatusInternalServerError, 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, versionTemplate, http.StatusOK, VersionsData{ + Page: Page{ + Precedent: fmt.Sprintf("/state/%d", state.Id), + Section: "versions", + Title: state.Path, + }, + Account: account, + State: state, + Version: version, + VersionData: versionData, + }) + }) +} |