/
update.go
64 lines (54 loc) · 1.78 KB
/
update.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package expenses
import (
"net/http"
"github.com/Ozoniuss/casheer/internal/handlers/common"
"github.com/Ozoniuss/casheer/internal/model"
"github.com/Ozoniuss/casheer/pkg/casheerapi"
"github.com/gin-gonic/gin"
"gorm.io/gorm/clause"
)
func (h *handler) HandleUpdateExpense(ctx *gin.Context) {
entid := ctx.GetInt("entid")
id := ctx.GetInt("expid")
req, err := common.CtxGetTyped[casheerapi.UpdateExpenseRequest](ctx, "req")
if err != nil {
common.ErrorAndAbort(ctx, err)
return
}
var oldExpense model.Expense
err = h.db.WithContext(ctx).Scopes(model.RequiredEntry(entid)).Where("id = ?", id).Take(&oldExpense).Error
if err != nil {
common.ErrorAndAbort(ctx, err)
return
}
updateExpenseFields(req, &oldExpense)
err = h.db.WithContext(ctx).Clauses(clause.Returning{}).Scopes(model.ValidateModel(oldExpense)).
Save(&oldExpense).Error
if err != nil {
common.ErrorAndAbort(ctx, err)
}
resp := casheerapi.UpdateExpenseResponse{
Data: ExpenseToPublic(oldExpense, h.entriesURL),
}
ctx.JSON(http.StatusOK, &resp)
}
func updateExpenseFields(req casheerapi.UpdateExpenseRequest, expense *model.Expense) {
if req.Data.Attributes.Value.Amount != nil {
expense.Amount = *req.Data.Attributes.Value.Amount
}
if req.Data.Attributes.Value.Currency != nil {
expense.Currency = *req.Data.Attributes.Value.Currency
}
if req.Data.Attributes.Description != nil {
expense.Description = *req.Data.Attributes.Description
}
if req.Data.Attributes.Value.Exponent != nil {
expense.Exponent = *req.Data.Attributes.Value.Exponent
}
if req.Data.Attributes.Name != nil {
expense.Name = *req.Data.Attributes.Name
}
if req.Data.Attributes.PaymentMethod != nil {
expense.PaymentMethod = *req.Data.Attributes.PaymentMethod
}
}