diff --git a/backend/app/http/admin/orders.go b/backend/app/http/admin/orders.go index 06f33f7..616d74b 100644 --- a/backend/app/http/admin/orders.go +++ b/backend/app/http/admin/orders.go @@ -9,6 +9,7 @@ import ( "quyun/providers/wepay" "github.com/gofiber/fiber/v3" + "github.com/pkg/errors" ) type OrderListQuery struct { @@ -45,7 +46,24 @@ func (ctl *orders) Refund(ctx fiber.Ctx, id int64) error { return err } - refundTotal := order.Price * int64(order.Discount) / 100 + if order.PaymentMethod == "balance" { + if err := models.Users.AddBalance(ctx.Context(), order.UserID, order.Meta.Data.CostBalance); err != nil { + return errors.Wrap(err, "add balance failed") + } + + if err := models.Users.RevokePosts(ctx.Context(), order.UserID, order.PostID); err != nil { + return errors.Wrap(err, "revoke posts failed") + } + + order.Status = fields.OrderStatusRefundSuccess + if err := models.Orders.Update(ctx.Context(), order); err != nil { + return errors.Wrap(err, "update order failed") + } + + return nil + } + + refundTotal := order.Price*int64(order.Discount)/100 - order.Meta.Data.CostBalance resp, err := ctl.wepay.Refund(ctx.Context(), func(bm *wepay.BodyMap) { bm. OutRefundNo(order.OrderNo). diff --git a/backend/app/models/users.go b/backend/app/models/users.go index 2252d6d..3b98d0e 100644 --- a/backend/app/models/users.go +++ b/backend/app/models/users.go @@ -492,3 +492,21 @@ func (m *usersModel) SetBalance(ctx context.Context, id int64, balance int64) er } return nil } + +// AddBalance adds the given amount to the user's balance +func (m *usersModel) AddBalance(ctx context.Context, id int64, amount int64) error { + tbl := table.Users + stmt := tbl. + UPDATE(tbl.Balance). + SET(tbl.Balance.ADD(Int64(amount))). + WHERE( + tbl.ID.EQ(Int64(id)), + ) + m.log.Infof("sql: %s", stmt.DebugSql()) + + if _, err := stmt.ExecContext(ctx, db); err != nil { + m.log.Errorf("error updating user balance: %v", err) + return err + } + return nil +}