package models import ( "log" "github.com/sujit-baniya/fiber-boilerplate/app" "gorm.io/gorm" ) type Cliente struct { gorm.Model Nombre string `json:"nombre" gorm:"column:nombre"` Empresa string `json:"empresa" gorm:"column:empresa"` Email string `json:"email" gorm:"column:email"` EmailCC string `json:"email_cc" gorm:"column:email_cc"` Telefono string `json:"telefono" gorm:"column:telefono"` Documento string `json:"documento" gorm:"column:documento"` Notas string `json:"notas" gorm:"column:notas"` Activo bool `json:"activo" gorm:"column:activo;default:true"` } func (Cliente) TableName() string { return "clientes" } func GetAllClientes(limit, offset int, search string) ([]Cliente, int64, error) { var items []Cliente var total int64 db := app.Http.Database.DB.Model(&Cliente{}) if search != "" { db = db.Where("nombre ILIKE ? OR email ILIKE ? OR empresa ILIKE ?", "%"+search+"%", "%"+search+"%", "%"+search+"%") } if err := db.Count(&total).Error; err != nil { return nil, 0, err } if err := db.Order("created_at DESC").Limit(limit).Offset(offset).Find(&items).Error; err != nil { return nil, 0, err } return items, total, nil } func GetAllClientesSelect() ([]Cliente, error) { var items []Cliente if err := app.Http.Database.DB.Where("activo = ?", true).Order("nombre ASC").Find(&items).Error; err != nil { return nil, err } return items, nil } func GetClienteByID(id uint) (*Cliente, error) { var item Cliente if err := app.Http.Database.DB.First(&item, id).Error; err != nil { return nil, err } return &item, nil } func CreateCliente(c Cliente) error { return app.Http.Database.DB.Create(&c).Error } func UpdateCliente(c Cliente) error { return app.Http.Database.DB.Model(&c).Updates(c).Error } func DeleteCliente(id uint) error { var c Cliente if err := app.Http.Database.DB.First(&c, id).Error; err != nil { return err } if err := app.Http.Database.DB.Delete(&c).Error; err != nil { log.Printf("Error deleting cliente: %v", err) return err } return nil }