package models import ( "time" "github.com/sujit-baniya/fiber-boilerplate/app" "gorm.io/gorm" ) // QueryHistory almacena el historial de consultas ejecutadas por los usuarios. type QueryHistory struct { gorm.Model ConxDbID uint `json:"conx_db_id" gorm:"column:conx_db_id;index"` ConxDb ConxDb `json:"conx_db" gorm:"foreignKey:ConxDbID"` UserID uint `json:"user_id" gorm:"column:user_id;index;default:0"` SQL string `json:"sql" gorm:"column:sql;type:text"` Status string `json:"status" gorm:"column:status"` // ok | error ErrorMsg string `json:"error_msg" gorm:"column:error_msg;type:text"` RowsAffect int64 `json:"rows_affect" gorm:"column:rows_affect"` DurationMs int64 `json:"duration_ms" gorm:"column:duration_ms"` ExecutedAt time.Time `json:"executed_at" gorm:"column:executed_at;autoCreateTime"` } func (QueryHistory) TableName() string { return "query_history" } // SaveQueryHistory guarda una entrada en el historial. func SaveQueryHistory(h QueryHistory) error { return app.Http.Database.DB.Create(&h).Error } // GetQueryHistory devuelve el historial de una conexión con paginación, filtrado por usuario. func GetQueryHistory(conxDbID, userID uint, limit, offset int) ([]QueryHistory, int64, error) { var items []QueryHistory var total int64 db := app.Http.Database.DB.Model(&QueryHistory{}).Where("conx_db_id = ? AND user_id = ?", conxDbID, userID) db.Count(&total) err := db.Order("executed_at DESC").Limit(limit).Offset(offset).Find(&items).Error return items, total, err } // DeleteQueryHistory elimina el historial de una conexión para un usuario. func DeleteQueryHistory(conxDbID, userID uint) error { return app.Http.Database.DB.Where("conx_db_id = ? AND user_id = ?", conxDbID, userID).Delete(&QueryHistory{}).Error } // GetQueryHistoryAdmin devuelve todo el historial de una conexión (solo admin). func GetQueryHistoryAdmin(conxDbID uint, limit, offset int) ([]QueryHistory, int64, error) { var items []QueryHistory var total int64 db := app.Http.Database.DB.Model(&QueryHistory{}).Where("conx_db_id = ?", conxDbID) db.Count(&total) err := db.Order("executed_at DESC").Limit(limit).Offset(offset).Find(&items).Error return items, total, err } // DeleteQueryHistoryAdmin elimina todo el historial de una conexión (solo admin). func DeleteQueryHistoryAdmin(conxDbID uint) error { return app.Http.Database.DB.Where("conx_db_id = ?", conxDbID).Delete(&QueryHistory{}).Error }