diff --git a/controllers_v2/keysend.ctrl.go b/controllers_v2/keysend.ctrl.go index 943c9dd..3578a45 100644 --- a/controllers_v2/keysend.ctrl.go +++ b/controllers_v2/keysend.ctrl.go @@ -81,7 +81,22 @@ func (controller *KeySendController) KeySend(c echo.Context) error { c.Logger().Errorf("Invalid keysend request body: %v", err) return c.JSON(http.StatusBadRequest, responses.BadArgumentsError) } - + syntheticPayReq := &lnd.LNPayReq{ + PayReq: &lnrpc.PayReq{ + NumSatoshis: reqBody.Amount, + }, + Keysend: true, + } + resp, err := controller.svc.CheckPaymentAllowed(context.Background(), syntheticPayReq, userID) + if resp != nil { + c.Logger().Errorf("User does not have enough balance user_id:%v amount:%v", userID, syntheticPayReq.PayReq.NumSatoshis) + return c.JSON(resp.HttpStatusCode, resp) + } + if err != nil { + errResp := responses.GeneralServerError + c.Logger().Errorf("Failed to send keysend: %s", errResp.Message) + return c.JSON(errResp.HttpStatusCode, errResp) + } result, errResp := controller.SingleKeySend(c.Request().Context(), &reqBody, userID) if errResp != nil { c.Logger().Errorf("Failed to send keysend: %s", errResp.Message) @@ -119,6 +134,23 @@ func (controller *KeySendController) MultiKeySend(c echo.Context) error { return c.JSON(http.StatusBadRequest, responses.BadArgumentsError) } } + totalAmount := func(keysends []KeySendRequestBody) int64 { var total int64; for _, keysend := range keysends { total += keysend.Amount }; return total }(reqBody.Keysends) + syntheticPayReq := &lnd.LNPayReq{ + PayReq: &lnrpc.PayReq{ + NumSatoshis: totalAmount, + }, + Keysend: true, + } + resp, err := controller.svc.CheckPaymentAllowed(context.Background(), syntheticPayReq, userID) + if resp != nil { + c.Logger().Errorf("User does not have enough balance user_id:%v amount:%v", userID, syntheticPayReq.PayReq.NumSatoshis) + return c.JSON(resp.HttpStatusCode, resp) + } + if err != nil { + errResp := responses.GeneralServerError + c.Logger().Errorf("Failed to send keysend: %s", errResp.Message) + return c.JSON(errResp.HttpStatusCode, errResp) + } result := &MultiKeySendResponseBody{ Keysends: []KeySendResult{}, } @@ -172,15 +204,6 @@ func (controller *KeySendController) SingleKeySend(ctx context.Context, reqBody HttpStatusCode: 400, } } - resp, err := controller.svc.CheckPaymentAllowed(ctx, lnPayReq, userID) - if err != nil { - controller.svc.Logger.Error(err) - return nil, &responses.GeneralServerError - } - if resp != nil { - controller.svc.Logger.Errorf("User does not have enough balance user_id:%v amount:%v", userID, lnPayReq.PayReq.NumSatoshis) - return nil, resp - } invoice, err := controller.svc.AddOutgoingInvoice(ctx, userID, "", lnPayReq) if err != nil { controller.svc.Logger.Error(err)