diff --git a/controllers/checkpayment.ctrl.go b/controllers/checkpayment.ctrl.go index cf17cf3..e92fa6d 100644 --- a/controllers/checkpayment.ctrl.go +++ b/controllers/checkpayment.ctrl.go @@ -8,17 +8,34 @@ import ( ) // CheckPaymentController : CheckPaymentController struct -type CheckPaymentController struct{} +type CheckPaymentController struct { + svc *service.LndhubService +} func NewCheckPaymentController(svc *service.LndhubService) *CheckPaymentController { - return &CheckPaymentController{} + return &CheckPaymentController{svc: svc} } // CheckPayment : Check Payment Controller -func (CheckPaymentController) CheckPayment(c echo.Context) error { - _ = c.Param("payment_hash") +func (controller *CheckPaymentController) CheckPayment(c echo.Context) error { + userId := c.Get("UserID").(int64) + rHash := c.Param("payment_hash") - return c.JSON(http.StatusBadRequest, echo.Map{ - "paid": true, - }) + invoice, err := controller.svc.FindInvoiceByPaymentHash(userId, rHash) + + // Probably we did not find the invoice + if err != nil { + c.Logger().Errorf("Invalid checkpayment request payment_hash=%s", rHash) + return c.JSON(http.StatusBadRequest, echo.Map{ + "error": true, + "code": 8, + "message": "Bad arguments", + }) + } + + var responseBody struct { + IsPaid bool `json:"paid"` + } + responseBody.IsPaid = !invoice.SettledAt.IsZero() + return c.JSON(http.StatusOK, &responseBody) } diff --git a/lib/service/invoices.go b/lib/service/invoices.go index d4232a8..a9a456d 100644 --- a/lib/service/invoices.go +++ b/lib/service/invoices.go @@ -10,6 +10,16 @@ import ( "github.com/lightningnetwork/lnd/lnrpc" ) +func (svc *LndhubService) FindInvoiceByPaymentHash(userId int64, rHash string) (*models.Invoice, error) { + var invoice models.Invoice + + err := svc.DB.NewSelect().Model(&invoice).Where("invoice.user_id = ? AND invoice.r_hash = ?", userId, rHash).Limit(1).Scan(context.TODO()) + if err != nil { + return &invoice, err + } + return &invoice, nil +} + func (svc *LndhubService) Payinvoice(userId int64, invoice string) error { debitAccount, err := svc.AccountFor(context.TODO(), "current", userId) if err != nil {