From 21c8d6601a274262074e39845be24d8020d2e5aa Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Tue, 28 Jan 2025 00:30:30 +0100 Subject: feat(webui): bootstrap state version page --- pkg/webui/version.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 pkg/webui/version.go (limited to 'pkg/webui/version.go') 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, + }) + }) +} -- cgit v1.2.3