mirror of
https://github.com/getAlby/lndhub.go.git
synced 2025-12-19 21:54:59 +01:00
chore: optimize keysend/multikeysend balance checks
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user