feat(transaction-recurring): #100 generate transactions
All checks were successful
Build Docker Image / Build-Docker-Image (push) Successful in 5m13s
Build and Push Docker Image / Build-And-Push-Docker-Image (push) Successful in 5m7s

This commit was merged in pull request #136.
This commit is contained in:
2025-05-29 00:00:19 +02:00
parent 1e7f2878ba
commit 76da3ca703
7 changed files with 183 additions and 87 deletions

View File

@@ -0,0 +1,22 @@
package middleware
import (
"net/http"
"spend-sparrow/service"
)
func GenerateRecurringTransactions(transactionRecurring service.TransactionRecurring) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
user := GetUser(r)
if user == nil || r.Method != http.MethodGet {
next.ServeHTTP(w, r)
return
}
_ = transactionRecurring.GenerateTransactions(user)
next.ServeHTTP(w, r)
})
}
}

View File

@@ -1,12 +1,15 @@
package handler
import (
"fmt"
"net/http"
"spend-sparrow/handler/middleware"
"spend-sparrow/service"
t "spend-sparrow/template/transaction"
"spend-sparrow/types"
"spend-sparrow/utils"
"strconv"
"time"
"github.com/a-h/templ"
"github.com/google/uuid"
@@ -137,20 +140,66 @@ func (h TransactionImpl) handleUpdateTransaction() http.HandlerFunc {
}
var (
transaction *types.Transaction
err error
id uuid.UUID
err error
)
input := types.TransactionInput{
Id: r.PathValue("id"),
AccountId: r.FormValue("account-id"),
TreasureChestId: r.FormValue("treasure-chest-id"),
Value: r.FormValue("value"),
Timestamp: r.FormValue("timestamp"),
idStr := r.PathValue("id")
if idStr != "new" {
id, err = uuid.Parse(idStr)
if err != nil {
handleError(w, r, fmt.Errorf("could not parse Id: %w", service.ErrBadRequest))
return
}
}
accountIdStr := r.FormValue("account-id")
var accountId *uuid.UUID
if accountIdStr != "" {
i, err := uuid.Parse(accountIdStr)
if err != nil {
handleError(w, r, fmt.Errorf("could not parse account id: %w", service.ErrBadRequest))
return
}
accountId = &i
}
treasureChestIdStr := r.FormValue("treasure-chest-id")
var treasureChestId *uuid.UUID
if treasureChestIdStr != "" {
i, err := uuid.Parse(treasureChestIdStr)
if err != nil {
handleError(w, r, fmt.Errorf("could not parse treasure chest id: %w", service.ErrBadRequest))
return
}
treasureChestId = &i
}
valueF, err := strconv.ParseFloat(r.FormValue("value"), 64)
if err != nil {
handleError(w, r, fmt.Errorf("could not parse value: %w", service.ErrBadRequest))
return
}
value := int64(valueF * service.DECIMALS_MULTIPLIER)
timestamp, err := time.Parse("2006-01-02", r.FormValue("timestamp"))
if err != nil {
handleError(w, r, fmt.Errorf("could not parse timestamp: %w", service.ErrBadRequest))
return
}
input := types.Transaction{
Id: id,
AccountId: accountId,
TreasureChestId: treasureChestId,
Value: value,
Timestamp: timestamp,
Party: r.FormValue("party"),
Description: r.FormValue("description"),
}
if input.Id == "new" {
var transaction *types.Transaction
if idStr == "new" {
transaction, err = h.s.Add(user, input)
if err != nil {
handleError(w, r, err)