Documentation
¶
Index ¶
- Variables
- func FormatEventDescription(eventType string) string
- func GetSupportedEvents() map[string]string
- func Init(db *gorm.DB, workers, maxRetries int)
- func TriggerCustomerCreated(customer *models.Customer)
- func TriggerCustomerTierUpgraded(customer *models.Customer, oldTier, newTier string)
- func TriggerOrderCreated(order *models.Order, supplier *models.Supplier)
- func TriggerOrderFulfilled(order *models.Order, supplier *models.Supplier)
- func TriggerPaymentFailed(sale *models.Sale, product *models.Product, reason string)
- func TriggerPaymentReceived(sale *models.Sale, product *models.Product, phone string)
- func TriggerProductCreated(product *models.Product)
- func TriggerProductLowStock(product *models.Product)
- func TriggerProductUpdated(product *models.Product)
- func TriggerSaleCreated(sale *models.Sale, product *models.Product)
- func TriggerSaleUpdated(sale *models.Sale, product *models.Product)
- func VerifySignature(payload []byte, signature, secret string) bool
- type Delivery
- type DeliveryRepo
- type DeliveryRepository
- type DeliveryService
- type Event
- type EventDelivery
- type EventType
- type Manager
- func (m *Manager) TriggerCustomerCreated(customer *models.Customer)
- func (m *Manager) TriggerCustomerTierUpgraded(customer *models.Customer, oldTier, newTier string)
- func (m *Manager) TriggerOrderCreated(order *models.Order, supplier *models.Supplier)
- func (m *Manager) TriggerOrderFulfilled(order *models.Order, supplier *models.Supplier)
- func (m *Manager) TriggerPaymentFailed(sale *models.Sale, product *models.Product, reason string)
- func (m *Manager) TriggerPaymentReceived(sale *models.Sale, product *models.Product, phone string)
- func (m *Manager) TriggerProductCreated(product *models.Product)
- func (m *Manager) TriggerProductLowStock(product *models.Product)
- func (m *Manager) TriggerProductUpdated(product *models.Product)
- func (m *Manager) TriggerSaleCreated(sale *models.Sale, product *models.Product)
- func (m *Manager) TriggerSaleUpdated(sale *models.Sale, product *models.Product)
- type Service
- type WebhookDelivery
- type WebhookEvent
- type WebhookRepository
Constants ¶
This section is empty.
Variables ¶
var SupportedEvents = map[string]string{
"sale.created": "A new sale is recorded",
"sale.updated": "A sale is updated",
"product.created": "A new product is added",
"product.updated": "A product is updated",
"product.low_stock": "Product stock is low",
"product.out_of_stock": "Product is out of stock",
"payment.completed": "Payment received",
"payment.failed": "Payment failed",
"shop.upgraded": "Shop plan upgraded",
}
Supported events
Functions ¶
func FormatEventDescription ¶
FormatEventDescription returns human-readable event description
func GetSupportedEvents ¶
GetSupportedEvents returns all supported events
func TriggerCustomerCreated ¶
func TriggerOrderFulfilled ¶
func TriggerPaymentFailed ¶
func TriggerPaymentReceived ¶
func TriggerProductCreated ¶
func TriggerProductLowStock ¶
func TriggerProductUpdated ¶
func TriggerSaleCreated ¶
Helper functions for global access
func VerifySignature ¶
VerifySignature verifies webhook signature
Types ¶
type Delivery ¶
type Delivery struct {
ID uint `json:"id"`
EventID string `json:"event_id"`
WebhookID uint `json:"webhook_id"`
URL string `json:"url"`
Status string `json:"status"` // pending, success, failed
StatusCode int `json:"status_code"`
Response string `json:"response"`
Attempts int `json:"attempts"`
CreatedAt time.Time `json:"created_at"`
SentAt *time.Time `json:"sent_at"`
}
Delivery represents a webhook delivery attempt
type DeliveryRepo ¶
type DeliveryRepo struct {
// contains filtered or unexported fields
}
type DeliveryRepository ¶
type DeliveryRepository interface {
Create(delivery *Delivery) error
Update(delivery *Delivery) error
GetByEventID(eventID string) ([]Delivery, error)
}
DeliveryRepository interface
type DeliveryService ¶
type DeliveryService struct {
// contains filtered or unexported fields
}
func NewDeliveryService ¶
func NewDeliveryService(db *gorm.DB, workers, maxRetries int) *DeliveryService
func (*DeliveryService) GetEventStatus ¶
func (s *DeliveryService) GetEventStatus(eventID uint) (map[string]interface{}, error)
func (*DeliveryService) Start ¶
func (s *DeliveryService) Start(ctx context.Context)
func (*DeliveryService) TriggerEvent ¶
func (s *DeliveryService) TriggerEvent(eventType EventType, data interface{}) error
type Event ¶
type Event struct {
Type string `json:"type"`
ShopID uint `json:"shop_id"`
Timestamp time.Time `json:"timestamp"`
Data interface{} `json:"data"`
}
Event represents a webhook event
type EventDelivery ¶
type EventType ¶
type EventType string
const ( EventSaleCreated EventType = "sale.created" EventSaleUpdated EventType = "sale.updated" EventProductCreated EventType = "product.created" EventProductUpdated EventType = "product.updated" EventProductLowStock EventType = "product.low_stock" EventPaymentReceived EventType = "payment.received" EventPaymentFailed EventType = "payment.failed" EventCustomerCreated EventType = "customer.created" EventCustomerTier EventType = "customer.tier_upgraded" EventShopCreated EventType = "shop.created" EventOrderCreated EventType = "order.created" EventOrderFulfilled EventType = "order.fulfilled" )
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager wraps the delivery service for global access
func (*Manager) TriggerCustomerCreated ¶
TriggerCustomerCreated triggers a customer.created event
func (*Manager) TriggerCustomerTierUpgraded ¶
TriggerCustomerTierUpgraded triggers a customer.tier_upgraded event
func (*Manager) TriggerOrderCreated ¶
TriggerOrderCreated triggers an order.created event
func (*Manager) TriggerOrderFulfilled ¶
TriggerOrderFulfilled triggers an order.fulfilled event
func (*Manager) TriggerPaymentFailed ¶
TriggerPaymentFailed triggers a payment.failed event
func (*Manager) TriggerPaymentReceived ¶
TriggerPaymentReceived triggers a payment.received event
func (*Manager) TriggerProductCreated ¶
TriggerProductCreated triggers a product.created event
func (*Manager) TriggerProductLowStock ¶
TriggerProductLowStock triggers a product.low_stock event
func (*Manager) TriggerProductUpdated ¶
TriggerProductUpdated triggers a product.updated event
func (*Manager) TriggerSaleCreated ¶
TriggerSaleCreated triggers a sale.created event
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
Service handles webhook delivery
func New ¶
func New(webhookRepo WebhookRepository, deliveryRepo DeliveryRepository) *Service
New creates a new webhook service
func (*Service) AsyncSendEvent ¶
AsyncSendEvent sends event asynchronously (non-blocking)
type WebhookDelivery ¶
type WebhookDelivery struct {
ID uint `gorm:"primaryKey" json:"id"`
EventID uint `gorm:"index" json:"event_id"`
WebhookURL string `gorm:"size:500" json:"webhook_url"`
Status string `gorm:"size:20;default:pending" json:"status"`
HTTPStatus int `json:"http_status"`
ResponseBody string `gorm:"size:1000" json:"response_body"`
Error string `gorm:"size:500" json:"error"`
Attempt int `gorm:"default:0" json:"attempt"`
DeliveredAt *time.Time `json:"delivered_at"`
CreatedAt time.Time `json:"created_at"`
}
type WebhookEvent ¶
type WebhookEvent struct {
ID uint `gorm:"primaryKey" json:"id"`
WebhookID uint `gorm:"index" json:"webhook_id"`
Event EventType `gorm:"size:50;index" json:"event"`
Payload string `gorm:"type:text" json:"payload"`
Status string `gorm:"size:20;default:pending" json:"status"`
Attempts int `gorm:"default:0" json:"attempts"`
Error string `gorm:"size:500" json:"error"`
SentAt *time.Time `json:"sent_at"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}