treasurer/internal/payment_provider/alchemy/provider.go

66 lines
1.5 KiB
Go
Raw Normal View History

2025-07-21 11:48:53 +00:00
package alchemy
import (
"context"
"fmt"
2025-07-21 11:48:53 +00:00
"gitea.pena/PenaSide/treasurer/internal/errors"
"gitea.pena/PenaSide/treasurer/internal/models"
"gitea.pena/PenaSide/treasurer/internal/models/alchemy"
2025-07-21 11:48:53 +00:00
"github.com/gofiber/fiber/v2"
"go.uber.org/zap"
)
const ProviderName = "alchemy"
type Config struct {
WalletAddress string `json:"walletAddress"`
2025-07-21 11:48:53 +00:00
}
type Provider struct {
logger *zap.Logger
config *Config
}
type Deps struct {
Logger *zap.Logger
Config *Config
}
func New(deps Deps) *Provider {
return &Provider{
logger: deps.Logger,
config: deps.Config,
}
}
func (p *Provider) GetName() string {
return ProviderName
}
func (p *Provider) GetSupportedPaymentMethods() []models.PaymentType {
return []models.PaymentType{models.PaymentTypeAlchemy}
}
func (p *Provider) CreateInvoice(ctx context.Context, req map[string]string) (string, errors.Error) {
return "", nil
}
func (p *Provider) RegisterWebhookHandlers(router fiber.Router) {
router.Post("/webhook/alchemy", p.handleWebhook)
}
func (p *Provider) handleWebhook(ctx *fiber.Ctx) error {
var payload alchemy.AlchemyAddressActivityWebhook
if err := ctx.BodyParser(&payload); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString(fmt.Sprintf("failed to parse Alchemy webhook: %s", err.Error()))
}
for _, act := range payload.Event.Activity {
if act.ToAddress != p.config.WalletAddress {
continue
}
//TODO: найти инвойс по act.Value и act.FromAddress
}
return ctx.SendStatus(fiber.StatusOK)
2025-07-21 11:48:53 +00:00
}