108 lines
2.4 KiB
Go
108 lines
2.4 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"git.javil.eu/jacob1123/budgeteer/postgres"
|
|
"github.com/google/uuid"
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
func (h *Handler) importYNAB(c echo.Context) error {
|
|
budgetID := c.Param("budgetid")
|
|
if budgetID == "" {
|
|
return echo.NewHTTPError(http.StatusBadRequest, "no budget_id specified")
|
|
}
|
|
|
|
budgetUUID, err := uuid.Parse(budgetID)
|
|
if err != nil {
|
|
return echo.NewHTTPError(http.StatusBadRequest, err)
|
|
}
|
|
|
|
ynab, err := postgres.NewYNABImport(c.Request().Context(), h.Service.Queries, budgetUUID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
transactionsFile, err := c.FormFile("transactions")
|
|
if err != nil {
|
|
return fmt.Errorf("get transactions: %w", err)
|
|
}
|
|
|
|
transactions, err := transactionsFile.Open()
|
|
if err != nil {
|
|
return fmt.Errorf("open transactions: %w", err)
|
|
}
|
|
|
|
err = ynab.ImportTransactions(c.Request().Context(), transactions)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
assignmentsFile, err := c.FormFile("assignments")
|
|
if err != nil {
|
|
return fmt.Errorf("get assignments: %w", err)
|
|
}
|
|
|
|
assignments, err := assignmentsFile.Open()
|
|
if err != nil {
|
|
return fmt.Errorf("open assignments: %w", err)
|
|
}
|
|
|
|
err = ynab.ImportAssignments(c.Request().Context(), assignments)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (h *Handler) exportYNABTransactions(c echo.Context) error {
|
|
budgetID := c.Param("budgetid")
|
|
if budgetID == "" {
|
|
return echo.NewHTTPError(http.StatusBadRequest, "no budget_id specified")
|
|
}
|
|
|
|
budgetUUID, err := uuid.Parse(budgetID)
|
|
if err != nil {
|
|
return echo.NewHTTPError(http.StatusBadRequest, err)
|
|
}
|
|
|
|
ynab, err := postgres.NewYNABExport(c.Request().Context(), h.Service.Queries, budgetUUID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = ynab.ExportTransactions(c.Request().Context(), c.Response().Writer)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (h *Handler) exportYNABAssignments(c echo.Context) error {
|
|
budgetID := c.Param("budgetid")
|
|
if budgetID == "" {
|
|
return echo.NewHTTPError(http.StatusBadRequest, "no budget_id specified")
|
|
}
|
|
|
|
budgetUUID, err := uuid.Parse(budgetID)
|
|
if err != nil {
|
|
return echo.NewHTTPError(http.StatusBadRequest, err)
|
|
}
|
|
|
|
ynab, err := postgres.NewYNABExport(c.Request().Context(), h.Service.Queries, budgetUUID)
|
|
if err != nil {
|
|
return echo.NewHTTPError(http.StatusInternalServerError, err)
|
|
}
|
|
|
|
err = ynab.ExportAssignments(c.Request().Context(), c.Response().Writer)
|
|
if err != nil {
|
|
return echo.NewHTTPError(http.StatusInternalServerError, err)
|
|
}
|
|
|
|
return nil
|
|
}
|