up
This commit is contained in:
@@ -104,3 +104,74 @@ func GetBoldWebhookLogs(limit int) ([]BoldWebhookLog, error) {
|
||||
}
|
||||
return logs, nil
|
||||
}
|
||||
|
||||
// GetBoldWebhookLogsPaginated devuelve los logs con paginación y filtro por tipo.
|
||||
func GetBoldWebhookLogsPaginated(page, limit int, tipo string) ([]BoldWebhookLog, int64, error) {
|
||||
var logs []BoldWebhookLog
|
||||
var total int64
|
||||
db := app.Http.Database.DB.Model(&BoldWebhookLog{})
|
||||
if tipo != "" && tipo != "TODOS" {
|
||||
db = db.Where("tipo = ?", tipo)
|
||||
}
|
||||
db.Count(&total)
|
||||
offset := (page - 1) * limit
|
||||
if err := db.Order("id DESC").Limit(limit).Offset(offset).Find(&logs).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return logs, total, nil
|
||||
}
|
||||
|
||||
// ─── Callback log (intentos de pago) ─────────────────────────────────────────
|
||||
|
||||
// BoldCallbackLog registra cada visita a la URL de retorno de Bold.
|
||||
// Esto captura usuarios que iniciaron el proceso de pago (llegaron al checkout)
|
||||
// pero pueden haber abandonado, fallado o completado el pago.
|
||||
type BoldCallbackLog struct {
|
||||
gorm.Model
|
||||
// Referencia principal recibida de Bold (bold-order-id / payment_link / reference)
|
||||
Referencia string `json:"referencia" gorm:"column:referencia;type:varchar(120);index"`
|
||||
PaymentLink string `json:"payment_link" gorm:"column:payment_link;type:varchar(80)"`
|
||||
// Todos los parámetros GET recibidos en JSON (para depuración)
|
||||
Params string `json:"params" gorm:"column:params;type:text"`
|
||||
// Estado: pendiente | pagado | fallido | revertido
|
||||
Estado string `json:"estado" gorm:"column:estado;type:varchar(20);default:'pendiente'"`
|
||||
// Datos del cliente si están disponibles
|
||||
PayerEmail string `json:"payer_email" gorm:"column:payer_email;type:varchar(255)"`
|
||||
// Datos de red (para análisis)
|
||||
IP string `json:"ip" gorm:"column:ip;type:varchar(45)"`
|
||||
UserAgent string `json:"user_agent" gorm:"column:user_agent;type:text"`
|
||||
}
|
||||
|
||||
func (BoldCallbackLog) TableName() string { return "bold_callback_log" }
|
||||
|
||||
// SaveBoldCallbackLog guarda un registro de intento de pago.
|
||||
func SaveBoldCallbackLog(entry BoldCallbackLog) error {
|
||||
return app.Http.Database.DB.Create(&entry).Error
|
||||
}
|
||||
|
||||
// UpdateBoldCallbackEstado actualiza el estado de los intentos que coincidan con la referencia.
|
||||
// Se llama desde el webhook cuando llega un evento SALE_APPROVED, SALE_REJECTED, etc.
|
||||
func UpdateBoldCallbackEstado(referencia, estado string) {
|
||||
if referencia == "" {
|
||||
return
|
||||
}
|
||||
app.Http.Database.DB.Model(&BoldCallbackLog{}).
|
||||
Where("referencia = ? AND estado = 'pendiente'", referencia).
|
||||
Update("estado", estado)
|
||||
}
|
||||
|
||||
// GetBoldCallbackLogsPaginated devuelve los intentos de pago con paginación y filtro.
|
||||
func GetBoldCallbackLogsPaginated(page, limit int, estado string) ([]BoldCallbackLog, int64, error) {
|
||||
var logs []BoldCallbackLog
|
||||
var total int64
|
||||
db := app.Http.Database.DB.Model(&BoldCallbackLog{})
|
||||
if estado != "" && estado != "TODOS" {
|
||||
db = db.Where("estado = ?", estado)
|
||||
}
|
||||
db.Count(&total)
|
||||
offset := (page - 1) * limit
|
||||
if err := db.Order("id DESC").Limit(limit).Offset(offset).Find(&logs).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return logs, total, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user