package models import ( "time" "github.com/sujit-baniya/fiber-boilerplate/app" "gorm.io/gorm" ) type Tarea struct { gorm.Model Titulo string `json:"titulo" gorm:"column:titulo;size:200"` Descripcion string `json:"descripcion" gorm:"column:descripcion;type:text"` Estado string `json:"estado" gorm:"column:estado;default:'por_hacer';index"` Prioridad string `json:"prioridad" gorm:"column:prioridad;default:'media'"` AsignadoID *uint `json:"asignado_id" gorm:"column:asignado_id;index"` Asignado *Users `json:"asignado" gorm:"foreignKey:AsignadoID"` CreadoPorID uint `json:"creado_por_id" gorm:"column:creado_por_id"` CreadoPor *Users `json:"creado_por" gorm:"foreignKey:CreadoPorID"` FechaLimite *time.Time `json:"fecha_limite" gorm:"column:fecha_limite"` Orden int `json:"orden" gorm:"column:orden;default:0"` } func (Tarea) TableName() string { return "tarea" } type TareaComentario struct { ID uint `json:"id" gorm:"primaryKey;autoIncrement"` TareaID uint `json:"tarea_id" gorm:"column:tarea_id;index"` AutorID uint `json:"autor_id" gorm:"column:autor_id"` Autor *Users `json:"autor" gorm:"foreignKey:AutorID"` Contenido string `json:"contenido" gorm:"column:contenido;type:text"` Archivos string `json:"archivos" gorm:"column:archivos;type:text"` CreatedAt time.Time `json:"created_at"` } func (TareaComentario) TableName() string { return "tarea_comentario" } func GetAllTareas() ([]Tarea, error) { var items []Tarea err := app.Http.Database.DB. Preload("Asignado"). Preload("CreadoPor"). Order("estado ASC, orden ASC, created_at ASC"). Find(&items).Error return items, err } func GetTareaByID(id uint) (*Tarea, error) { var t Tarea err := app.Http.Database.DB. Preload("Asignado"). Preload("CreadoPor"). First(&t, id).Error return &t, err } func CreateTarea(t *Tarea) error { return app.Http.Database.DB.Create(t).Error } func SaveTarea(t *Tarea) error { return app.Http.Database.DB.Save(t).Error } func DeleteTarea(id uint) error { return app.Http.Database.DB.Delete(&Tarea{}, id).Error } func CambiarEstadoTarea(id uint, estado string) error { return app.Http.Database.DB.Model(&Tarea{}).Where("id = ?", id).Update("estado", estado).Error } func GetComentariosByTarea(tareaID uint) ([]TareaComentario, error) { var items []TareaComentario err := app.Http.Database.DB. Preload("Autor"). Where("tarea_id = ?", tareaID). Order("created_at ASC"). Find(&items).Error return items, err } func CreateComentario(c *TareaComentario) error { return app.Http.Database.DB.Create(c).Error }