diff --git a/http/accounts.go b/http/accounts.go index 7471009..6196882 100644 --- a/http/accounts.go +++ b/http/accounts.go @@ -8,26 +8,19 @@ import ( "github.com/google/uuid" ) -type AccountsData struct { +type AlwaysNeededData struct { + Budget postgres.Budget Accounts []postgres.GetAccountsWithBalanceRow } +type AccountsData struct { + AlwaysNeededData +} + func (h *Handler) accounts(c *gin.Context) { - budgetID := c.Param("budgetid") - budgetUUID, err := uuid.Parse(budgetID) - if err != nil { - c.Redirect(http.StatusTemporaryRedirect, "/login") - return - } - - accounts, err := h.Service.DB.GetAccountsWithBalance(c.Request.Context(), budgetUUID) - if err != nil { - c.AbortWithError(http.StatusInternalServerError, err) - return - } - + base := c.MustGet("data").(AlwaysNeededData) d := AccountsData{ - Accounts: accounts, + base, } c.HTML(http.StatusOK, "accounts.html", d) diff --git a/http/http.go b/http/http.go index 506305f..7866b8d 100644 --- a/http/http.go +++ b/http/http.go @@ -46,15 +46,16 @@ func (h *Handler) Serve() { router.GET("/", func(c *gin.Context) { c.HTML(http.StatusOK, "index.html", nil) }) router.GET("/login", h.login) router.GET("/register", h.register) - authenticatedFrontend := router.Group("") + withBudget := router.Group("") { - authenticatedFrontend.Use(h.verifyLoginWithRedirect) - authenticatedFrontend.GET("/dashboard", h.dashboard) - authenticatedFrontend.GET("/budget/:budgetid", h.budget) - authenticatedFrontend.GET("/budget/:budgetid/accounts", h.accounts) - authenticatedFrontend.GET("/account/:accountid", h.account) - authenticatedFrontend.GET("/admin", h.admin) - authenticatedFrontend.GET("/admin/clear-database", h.clearDatabase) + withBudget.Use(h.verifyLoginWithRedirect) + withBudget.Use(h.getImportantData) + withBudget.GET("/dashboard", h.dashboard) + withBudget.GET("/budget/:budgetid", h.budget) + withBudget.GET("/budget/:budgetid/accounts", h.accounts) + withBudget.GET("/account/:accountid", h.account) + withBudget.GET("/admin", h.admin) + withBudget.GET("/admin/clear-database", h.clearDatabase) } api := router.Group("/api/v1") { diff --git a/http/session.go b/http/session.go index b53b4cd..f712286 100644 --- a/http/session.go +++ b/http/session.go @@ -8,6 +8,7 @@ import ( "git.javil.eu/jacob1123/budgeteer" "git.javil.eu/jacob1123/budgeteer/postgres" "github.com/gin-gonic/gin" + "github.com/google/uuid" ) func (h *Handler) verifyLogin(c *gin.Context) (budgeteer.Token, error) { @@ -25,6 +26,28 @@ func (h *Handler) verifyLogin(c *gin.Context) (budgeteer.Token, error) { return token, nil } +func (h *Handler) getImportantData(c *gin.Context) { + budgetID := c.Param("budgetid") + budgetUUID, err := uuid.Parse(budgetID) + if err != nil { + c.Redirect(http.StatusTemporaryRedirect, "/login") + return + } + + accounts, err := h.Service.DB.GetAccountsWithBalance(c.Request.Context(), budgetUUID) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, err) + return + } + + base := AlwaysNeededData{ + Accounts: accounts, + } + + c.Set("data", base) + c.Next() +} + func (h *Handler) verifyLoginWithRedirect(c *gin.Context) { token, err := h.verifyLogin(c) if err != nil {