Merge pull request 'Remove unused code' (#48) from cleanup into master
All checks were successful
continuous-integration/drone/push Build is passing

Reviewed-on: #48
This commit is contained in:
Jan Bader 2022-04-06 22:18:59 +02:00
commit 9b67e700be
7 changed files with 48 additions and 121 deletions

View File

@ -69,5 +69,5 @@ func (h *Handler) editAccount(c *gin.Context) {
return return
} }
h.returnBudgetingData(c, account.BudgetID) h.getBudget(c, account.BudgetID)
} }

View File

@ -64,49 +64,3 @@ func (h *Handler) clearBudget(c *gin.Context) {
h.clearBudgetData(c, budgetUUID) h.clearBudgetData(c, budgetUUID)
} }
func (h *Handler) cleanNegativeBudget(c *gin.Context) {
/*budgetID := c.Param("budgetid")
budgetUUID, err := uuid.Parse(budgetID)
if err != nil {
c.Redirect(http.StatusTemporaryRedirect, "/login")
return
}*/
/*min_date, err := h.Service.GetFirstActivity(c.Request.Context(), budgetUUID)
date := getFirstOfMonthTime(min_date)
for {
nextDate := date.AddDate(0, 1, 0)
params := postgres.GetCategoriesWithBalanceParams{
BudgetID: budgetUUID,
ToDate: nextDate,
FromDate: date,
}
categories, err := h.Service.GetCategoriesWithBalance(c.Request.Context(), params)
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
for _, category := range categories {
available := category.Available.GetFloat64()
if available >= 0 {
continue
}
var negativeAvailable postgres.Numeric
negativeAvailable.Set(-available)
createAssignment := postgres.CreateAssignmentParams{
Date: nextDate.AddDate(0, 0, -1),
Amount: negativeAvailable,
CategoryID: category.ID,
}
h.Service.CreateAssignment(c.Request.Context(), createAssignment)
}
if nextDate.Before(time.Now()) {
date = nextDate
} else {
break
}
}*/
}

View File

@ -126,7 +126,7 @@ type BudgetingResponse struct {
Budget postgres.Budget Budget postgres.Budget
} }
func (h *Handler) budgeting(c *gin.Context) { func (h *Handler) budget(c *gin.Context) {
budgetID := c.Param("budgetid") budgetID := c.Param("budgetid")
budgetUUID, err := uuid.Parse(budgetID) budgetUUID, err := uuid.Parse(budgetID)
if err != nil { if err != nil {
@ -134,10 +134,10 @@ func (h *Handler) budgeting(c *gin.Context) {
return return
} }
h.returnBudgetingData(c, budgetUUID) h.getBudget(c, budgetUUID)
} }
func (h *Handler) returnBudgetingData(c *gin.Context, budgetUUID uuid.UUID) { func (h *Handler) getBudget(c *gin.Context, budgetUUID uuid.UUID) {
budget, err := h.Service.GetBudget(c.Request.Context(), budgetUUID) budget, err := h.Service.GetBudget(c.Request.Context(), budgetUUID)
if err != nil { if err != nil {
c.AbortWithError(http.StatusNotFound, err) c.AbortWithError(http.StatusNotFound, err)

View File

@ -1,25 +0,0 @@
package server
import (
"net/http"
"git.javil.eu/jacob1123/budgeteer/postgres"
"github.com/gin-gonic/gin"
)
func (h *Handler) dashboard(c *gin.Context) {
userID := MustGetToken(c).GetID()
budgets, err := h.Service.GetBudgetsForUser(c.Request.Context(), userID)
if err != nil {
return
}
d := DashboardData{
Budgets: budgets,
}
c.JSON(http.StatusOK, d)
}
type DashboardData struct {
Budgets []postgres.Budget
}

View File

@ -48,35 +48,34 @@ func (h *Handler) LoadRoutes(router *gin.Engine) {
api := router.Group("/api/v1") api := router.Group("/api/v1")
anonymous := api.Group("/user") anonymous := api.Group("/user")
anonymous.GET("/login", func(c *gin.Context) { c.Redirect(http.StatusPermanentRedirect, "/login") })
anonymous.POST("/login", h.loginPost) anonymous.POST("/login", h.loginPost)
anonymous.POST("/register", h.registerPost) anonymous.POST("/register", h.registerPost)
authenticated := api.Group("") authenticated := api.Group("")
authenticated.Use(h.verifyLoginWithForbidden) {
authenticated.GET("/dashboard", h.dashboard) authenticated.Use(h.verifyLoginWithForbidden)
authenticated.GET("/account/:accountid/transactions", h.transactionsForAccount) authenticated.GET("/account/:accountid/transactions", h.transactionsForAccount)
authenticated.POST("/account/:accountid/reconcile", h.reconcileTransactions) authenticated.POST("/account/:accountid/reconcile", h.reconcileTransactions)
authenticated.POST("/account/:accountid", h.editAccount) authenticated.POST("/account/:accountid", h.editAccount)
authenticated.GET("/admin/clear-database", h.clearDatabase) authenticated.GET("/admin/clear-database", h.clearDatabase)
budget := authenticated.Group("/budget") budget := authenticated.Group("/budget")
budget.POST("/new", h.newBudget) budget.POST("/new", h.newBudget)
budget.GET("/:budgetid", h.budgeting) budget.GET("/:budgetid", h.budget)
budget.GET("/:budgetid/:year/:month", h.budgetingForMonth) budget.GET("/:budgetid/:year/:month", h.budgetingForMonth)
budget.POST("/:budgetid/category/:categoryid/:year/:month", h.setCategoryAssignment) budget.POST("/:budgetid/category/:categoryid/:year/:month", h.setCategoryAssignment)
budget.GET("/:budgetid/autocomplete/payees", h.autocompletePayee) budget.GET("/:budgetid/autocomplete/payees", h.autocompletePayee)
budget.GET("/:budgetid/autocomplete/categories", h.autocompleteCategories) budget.GET("/:budgetid/autocomplete/categories", h.autocompleteCategories)
budget.DELETE("/:budgetid", h.deleteBudget) budget.DELETE("/:budgetid", h.deleteBudget)
budget.POST("/:budgetid/import/ynab", h.importYNAB) budget.POST("/:budgetid/import/ynab", h.importYNAB)
budget.POST("/:budgetid/export/ynab/transactions", h.exportYNABTransactions) budget.POST("/:budgetid/export/ynab/transactions", h.exportYNABTransactions)
budget.POST("/:budgetid/export/ynab/assignments", h.exportYNABAssignments) budget.POST("/:budgetid/export/ynab/assignments", h.exportYNABAssignments)
budget.POST("/:budgetid/settings/clear", h.clearBudget) budget.POST("/:budgetid/settings/clear", h.clearBudget)
budget.POST("/:budgetid/settings/clean-negative", h.cleanNegativeBudget)
transaction := authenticated.Group("/transaction") transaction := authenticated.Group("/transaction")
transaction.POST("/new", h.newTransaction) transaction.POST("/new", h.newTransaction)
transaction.POST("/:transactionid", h.newTransaction) transaction.POST("/:transactionid", h.updateTransaction)
}
} }
func (h *Handler) ServeStatic(c *gin.Context) { func (h *Handler) ServeStatic(c *gin.Context) {

View File

@ -27,7 +27,7 @@ type NewTransactionPayload struct {
State string `json:"state"` State string `json:"state"`
} }
func (h *Handler) newTransaction(c *gin.Context) { func (h *Handler) updateTransaction(c *gin.Context) {
var payload NewTransactionPayload var payload NewTransactionPayload
err := c.BindJSON(&payload) err := c.BindJSON(&payload)
if err != nil { if err != nil {
@ -42,8 +42,26 @@ func (h *Handler) newTransaction(c *gin.Context) {
} }
transactionID := c.Param("transactionid") transactionID := c.Param("transactionid")
if transactionID != "" { transactionUUID, err := uuid.Parse(transactionID)
h.UpdateTransaction(payload, amount, transactionID, c) if err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, ErrorResponse{"transactionid missing from URL"})
return
}
h.UpdateTransaction(payload, amount, transactionUUID, c)
}
func (h *Handler) newTransaction(c *gin.Context) {
var payload NewTransactionPayload
err := c.BindJSON(&payload)
if err != nil {
c.AbortWithError(http.StatusBadRequest, err)
return
}
amount, err := numeric.Parse(payload.Amount)
if err != nil {
c.AbortWithError(http.StatusBadRequest, fmt.Errorf("amount: %w", err))
return return
} }
@ -87,8 +105,7 @@ func (h *Handler) newTransaction(c *gin.Context) {
c.JSON(http.StatusOK, transaction) c.JSON(http.StatusOK, transaction)
} }
func (h *Handler) UpdateTransaction(payload NewTransactionPayload, amount numeric.Numeric, transactionID string, c *gin.Context) { func (h *Handler) UpdateTransaction(payload NewTransactionPayload, amount numeric.Numeric, transactionUUID uuid.UUID, c *gin.Context) {
transactionUUID := uuid.MustParse(transactionID)
if amount.IsZero() { if amount.IsZero() {
err := h.Service.DeleteTransaction(c.Request.Context(), transactionUUID) err := h.Service.DeleteTransaction(c.Request.Context(), transactionUUID)
if err != nil { if err != nil {

View File

@ -44,9 +44,6 @@ function deleteBudget() {
function clearBudget() { function clearBudget() {
POST("/budget/" + CurrentBudgetID.value + "/settings/clear", null) POST("/budget/" + CurrentBudgetID.value + "/settings/clear", null)
}; };
function cleanNegative() {
// <a href="/budget/{{.Budget.ID}}/settings/clean-negative">Fix all historic negative category-balances</a>
};
function ynabImport() { function ynabImport() {
if (transactionsFile.value == undefined || assignmentsFile.value == undefined) if (transactionsFile.value == undefined || assignmentsFile.value == undefined)
return return
@ -109,21 +106,6 @@ function ynabExport() {
Delete budget Delete budget
</Button> </Button>
</RowCard> </RowCard>
<RowCard class="flex-col p-3">
<h2 class="text-lg font-bold">
Fix all historic negative category-balances
</h2>
<p>
This restores YNABs functionality, that would substract any
overspent categories' balances from next months inflows.
</p>
<Button
class="bg-orange-500 py-2"
@click="cleanNegative"
>
Fix negative
</Button>
</RowCard>
<RowCard class="flex-col p-3"> <RowCard class="flex-col p-3">
<h2 class="text-lg font-bold"> <h2 class="text-lg font-bold">
Import YNAB Budget Import YNAB Budget