diff options
Diffstat (limited to 'pkg/webui/states.go')
-rw-r--r-- | pkg/webui/states.go | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/pkg/webui/states.go b/pkg/webui/states.go index c68b2c9..64b7967 100644 --- a/pkg/webui/states.go +++ b/pkg/webui/states.go @@ -10,6 +10,7 @@ import ( "git.adyxax.org/adyxax/tfstated/pkg/database" "git.adyxax.org/adyxax/tfstated/pkg/model" + "go.n16f.net/uuid" ) type StatesPage struct { @@ -22,6 +23,7 @@ type StatesPage struct { } var statesTemplates = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/states.html")) +var statesIdTemplate = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/statesId.html")) func handleStatesGET(db *database.DB) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -86,7 +88,48 @@ func handleStatesPOST(db *database.DB) http.Handler { }) return } - destination := path.Join("/version", version.Id.String()) + destination := path.Join("/versions", version.Id.String()) http.Redirect(w, r, destination, http.StatusFound) }) } + +func handleStatesIdGET(db *database.DB) http.Handler { + type StatesData struct { + Page *Page + State *model.State + Usernames map[string]string + Versions []model.Version + } + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var stateId uuid.UUID + if err := stateId.Parse(r.PathValue("id")); err != nil { + errorResponse(w, http.StatusBadRequest, err) + return + } + state, err := db.LoadStateById(stateId) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + versions, err := db.LoadVersionsByState(state) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + usernames, err := db.LoadAccountUsernames() + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + render(w, statesIdTemplate, http.StatusOK, StatesData{ + Page: makePage(r, &Page{ + Precedent: "/states", + Section: "states", + Title: state.Path, + }), + State: state, + Usernames: usernames, + Versions: versions, + }) + }) +} |