chore: optimize keysend/multikeysend balance checks

This commit is contained in:
im-adithya
2023-11-24 16:14:08 +05:30
parent 8944d65e7f
commit 37270cd23a

View File

@@ -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)