Implement backend
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Jan Bader 2022-09-11 21:10:04 +00:00
parent bae9f030b2
commit 2b15231ed1
4 changed files with 75 additions and 0 deletions

View File

@ -91,6 +91,24 @@ func (q *Queries) GetCategories(ctx context.Context, budgetID uuid.UUID) ([]GetC
return items, nil
}
const getCategoryGroupByName = `-- name: GetCategoryGroupByName :one
SELECT category_groups.id, category_groups.budget_id, category_groups.name FROM category_groups
WHERE category_groups.budget_id = $1
AND category_groups.name = $2
`
type GetCategoryGroupByNameParams struct {
BudgetID uuid.UUID
Name string
}
func (q *Queries) GetCategoryGroupByName(ctx context.Context, arg GetCategoryGroupByNameParams) (CategoryGroup, error) {
row := q.db.QueryRowContext(ctx, getCategoryGroupByName, arg.BudgetID, arg.Name)
var i CategoryGroup
err := row.Scan(&i.ID, &i.BudgetID, &i.Name)
return i, err
}
const getCategoryGroups = `-- name: GetCategoryGroups :many
SELECT category_groups.id, category_groups.budget_id, category_groups.name FROM category_groups
WHERE category_groups.budget_id = $1

View File

@ -8,6 +8,11 @@ RETURNING *;
SELECT category_groups.* FROM category_groups
WHERE category_groups.budget_id = $1;
-- name: GetCategoryGroupByName :one
SELECT category_groups.* FROM category_groups
WHERE category_groups.budget_id = $1
AND category_groups.name = $2;
-- name: CreateCategory :one
INSERT INTO categories
(name, category_group_id)

49
server/category_new.go Normal file
View File

@ -0,0 +1,49 @@
package server
import (
"net/http"
"git.javil.eu/jacob1123/budgeteer/postgres"
"github.com/google/uuid"
"github.com/labstack/echo/v4"
)
type newCategoryInformation struct {
BudgetID uuid.UUID `json:"budgetId"`
Name string `json:"name"`
Group string `json:"group"`
}
func (h *Handler) newCategory(c echo.Context) error {
var newCategory newCategoryInformation
if err := c.Bind(&newCategory); err != nil {
return echo.NewHTTPError(http.StatusNotAcceptable, err)
}
if newCategory.Name == "" {
return echo.NewHTTPError(http.StatusBadRequest, "category name is required")
}
if newCategory.Group == "" {
// TODO Handle new Group here?
return echo.NewHTTPError(http.StatusBadRequest, "category group is required")
}
categoryGroup, err := h.Service.GetCategoryGroupByName(c.Request().Context(), postgres.GetCategoryGroupByNameParams{
BudgetID: newCategory.BudgetID,
Name: newCategory.Group,
})
if err != nil {
return err
}
budget, err := h.Service.CreateCategory(c.Request().Context(), postgres.CreateCategoryParams{
CategoryGroupID: categoryGroup.ID,
Name: newCategory.Name,
})
if err != nil {
return err
}
return c.JSON(http.StatusOK, budget)
}

View File

@ -53,6 +53,9 @@ func (h *Handler) LoadRoutes(router *echo.Echo) {
account.POST("/:accountid/reconcile", h.reconcileTransactions)
account.POST("/:accountid", h.editAccount)
category := authenticated.Group("/category")
category.POST("/new", h.newCategory)
budget := authenticated.Group("/budget")
budget.POST("/new", h.newBudget)
budget.GET("/:budgetid", h.budget)