Split budget and dashboard routes into own files

This commit is contained in:
Jan Bader 2021-11-29 22:29:03 +00:00
parent f0a1d1d475
commit 6df72dc40d
6 changed files with 102 additions and 79 deletions

52
http/budget.go Normal file
View File

@ -0,0 +1,52 @@
package http
import (
"context"
"net/http"
"git.javil.eu/jacob1123/budgeteer"
"git.javil.eu/jacob1123/budgeteer/postgres"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
type BudgetData struct {
Token budgeteer.Token
Budget *postgres.Budget
Transactions []postgres.Transaction
}
func (h *Handler) budget(c *gin.Context) {
token, err := h.verifyLogin(c)
if err != nil {
c.Redirect(http.StatusTemporaryRedirect, "/login")
return
}
budgetID := c.Param("budgetid")
budgetUUID, err := uuid.Parse(budgetID)
if err != nil {
c.Redirect(http.StatusTemporaryRedirect, "/login")
return
}
budget, err := h.Service.DB.GetBudget(context.Background(), budgetUUID)
if err != nil {
c.AbortWithError(http.StatusNotFound, err)
return
}
transactions, err := h.Service.DB.GetTransactionsForBudget(context.Background(), budgetUUID)
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
d := BudgetData{
Token: token,
Budget: &budget,
Transactions: transactions,
}
c.HTML(http.StatusOK, "budget", d)
}

34
http/dashboard.go Normal file
View File

@ -0,0 +1,34 @@
package http
import (
"net/http"
"git.javil.eu/jacob1123/budgeteer"
"git.javil.eu/jacob1123/budgeteer/postgres"
"github.com/gin-gonic/gin"
)
func (h *Handler) dashboard(c *gin.Context) {
token, err := h.verifyLogin(c)
if err != nil {
c.Redirect(http.StatusTemporaryRedirect, "/login")
return
}
userID := token.GetID()
budgets, err := h.Service.BudgetsForUser(userID)
if err != nil {
return
}
d := DashboardData{
Token: token,
Budgets: budgets,
}
c.HTML(http.StatusOK, "dashboard", d)
}
type DashboardData struct {
Token budgeteer.Token
Budgets []postgres.Budget
}

View File

@ -1,22 +0,0 @@
package http
import (
"git.javil.eu/jacob1123/budgeteer"
"git.javil.eu/jacob1123/budgeteer/postgres"
)
type TemplateData struct {
Token budgeteer.Token
Budget *postgres.Budget
budgetService *postgres.Repository
}
func (d TemplateData) GetBudgets() []postgres.Budget {
userID := d.Token.GetID()
budgets, err := d.budgetService.BudgetsForUser(userID)
if err != nil {
return nil
}
return budgets
}

View File

@ -14,7 +14,6 @@ import (
"git.javil.eu/jacob1123/budgeteer/web"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
// Handler handles incoming requests
@ -65,35 +64,6 @@ func (h *Handler) Serve() {
router.Run(":1323")
}
func (h *Handler) budget(c *gin.Context) {
token, err := h.verifyLogin(c)
if err != nil {
c.Redirect(http.StatusTemporaryRedirect, "/login")
return
}
budgetID := c.Param("budgetid")
budgetUUID, err := uuid.Parse(budgetID)
if err != nil {
c.Redirect(http.StatusTemporaryRedirect, "/login")
return
}
budget, err := h.Service.DB.GetBudget(context.Background(), budgetUUID)
if err != nil {
c.AbortWithError(http.StatusUnauthorized, err)
return
}
d := TemplateData{
Token: token,
Budget: &budget,
budgetService: h.Service,
}
c.HTML(http.StatusOK, "budget", d)
}
func (h *Handler) newBudget(c *gin.Context) {
token, err := h.verifyLogin(c)
if err != nil {
@ -114,20 +84,6 @@ func (h *Handler) newBudget(c *gin.Context) {
}
}
func (h *Handler) dashboard(c *gin.Context) {
token, err := h.verifyLogin(c)
if err != nil {
c.Redirect(http.StatusTemporaryRedirect, "/login")
return
}
d := TemplateData{
Token: token,
budgetService: h.Service,
}
c.HTML(http.StatusOK, "dashboard", d)
}
func (h *Handler) verifyLogin(c *gin.Context) (budgeteer.Token, error) {
tokenString, err := c.Cookie(authCookie)
if err != nil {

View File

@ -8,20 +8,23 @@
</head>
<body>
<div class="container" id="head">
Budgeteer - {{.Token.GetName}} - Budget-View
Budgeteer - {{.Token.GetName}} - {{.Budget.Name}}
</div>
<div class="container col-lg-12" id="content">
{{range .GetBudgets}}
<div class="budget-item">
<a href="budget/{{.ID}}">{{.Name}}</a>
<span class="time"></span>
</div>
<div class="budget-item">
<a href="#newbudgetmodal" data-toggle="modal" data-target="#newbudgetmodal">New Budget</a>
<span class="time"></span>
</div>
<table class="container col-lg-12" id="content">
{{range .Transactions}}
<tr>
<td>{{.Date}}</td>
<td>
<a href="transaction/{{.ID}}">{{.Memo.String}}</a>
</td>
<td>{{.Amount}}</td>
</tr>
{{end}}
<div class="budget-item">
<a href="#newbudgetmodal" data-toggle="modal" data-target="#newbudgetmodal">New Budget</a>
<span class="time"></span>
</div>
</div>
</table>
{{template "budget-new"}}
</body>
</html>

View File

@ -11,7 +11,7 @@
Budgeteer - {{.Token.GetName}}
</div>
<div class="container col-lg-12" id="content">
{{range .GetBudgets}}
{{range .Budgets}}
<div class="budget-item">
<a href="budget/{{.ID}}">{{.Name}}</a>
<span class="time"></span>