package models import ( "github.com/sujit-baniya/fiber-boilerplate/app" "gorm.io/gorm" ) // ─── ProyectoTicket ─────────────────────────────────────────────────────────── type ProyectoTicket struct { gorm.Model ProyectoID uint `json:"proyecto_id" gorm:"column:proyecto_id;index"` PortalUserID uint `json:"portal_user_id" gorm:"column:portal_user_id;index"` AutorNombre string `json:"autor_nombre" gorm:"column:autor_nombre"` Titulo string `json:"titulo" gorm:"column:titulo"` Descripcion string `json:"descripcion" gorm:"column:descripcion;type:text"` Estado string `json:"estado" gorm:"column:estado;default:'abierto'"` // abierto|en_progreso|resuelto|cerrado Prioridad string `json:"prioridad" gorm:"column:prioridad;default:'media'"` // baja|media|alta|urgente Mensajes []TicketMensaje `json:"mensajes" gorm:"foreignKey:TicketID"` } func (ProyectoTicket) TableName() string { return "proyecto_tickets" } // ─── TicketMensaje ──────────────────────────────────────────────────────────── type TicketMensaje struct { gorm.Model TicketID uint `json:"ticket_id" gorm:"column:ticket_id;index"` Contenido string `json:"contenido" gorm:"column:contenido;type:text"` EsAdmin bool `json:"es_admin" gorm:"column:es_admin;default:false"` AutorNombre string `json:"autor_nombre" gorm:"column:autor_nombre"` } func (TicketMensaje) TableName() string { return "ticket_mensajes" } // ─── CRUD ───────────────────────────────────────────────────────────────────── func GetTicketsByProyecto(proyectoID uint) ([]ProyectoTicket, error) { var items []ProyectoTicket err := app.Http.Database.DB.Where("proyecto_id = ?", proyectoID). Preload("Mensajes").Order("created_at DESC").Find(&items).Error return items, err } func GetTicketByID(id uint) (*ProyectoTicket, error) { var item ProyectoTicket err := app.Http.Database.DB.Preload("Mensajes").First(&item, id).Error return &item, err } func CreateProyectoTicket(t *ProyectoTicket) error { return app.Http.Database.DB.Create(t).Error } func UpdateTicketEstado(id uint, estado string) error { return app.Http.Database.DB.Model(&ProyectoTicket{}).Where("id = ?", id). Update("estado", estado).Error } func CreateTicketMensaje(m *TicketMensaje) error { return app.Http.Database.DB.Create(m).Error } func GetTicketsByPortalUser(portalUserID uint) ([]ProyectoTicket, error) { var items []ProyectoTicket err := app.Http.Database.DB.Where("portal_user_id = ?", portalUserID). Preload("Mensajes").Order("created_at DESC").Find(&items).Error return items, err }