package models import ( "time" "gorm.io/gorm" ) // KnowledgeBase represents a knowledge base entry (FAQ) type KnowledgeBase struct { ID uint `json:"id" gorm:"primaryKey"` Question string `json:"question" gorm:"not null"` Answer string `json:"answer" gorm:"not null"` Category string `json:"category" gorm:"not null"` Tags string `json:"tags"` // Comma-separated tags Priority int `json:"priority" gorm:"default:1"` // Higher number = higher priority ViewCount int `json:"viewCount" gorm:"default:0"` Helpful int `json:"helpful" gorm:"default:0"` // Number of times marked as helpful NotHelpful int `json:"notHelpful" gorm:"default:0"` // Number of times marked as not helpful Active bool `json:"active" gorm:"default:true"` CreatedBy uint `json:"createdBy"` UpdatedBy uint `json:"updatedBy"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` DeletedAt gorm.DeletedAt `json:"-" gorm:"index"` // Relationships Creator User `json:"creator" gorm:"foreignKey:CreatedBy"` Updater User `json:"updater" gorm:"foreignKey:UpdatedBy"` } // KnowledgeBaseFeedback represents user feedback on a knowledge base entry type KnowledgeBaseFeedback struct { ID uint `json:"id" gorm:"primaryKey"` KnowledgeBaseID uint `json:"knowledgeBaseId" gorm:"not null"` UserID uint `json:"userId" gorm:"not null"` Helpful bool `json:"helpful"` // true if helpful, false if not helpful Comment string `json:"comment"` CreatedAt time.Time `json:"createdAt"` // Relationships KnowledgeBase KnowledgeBase `json:"knowledgeBase" gorm:"foreignKey:KnowledgeBaseID"` User User `json:"user" gorm:"foreignKey:UserID"` } // BeforeCreate is a GORM hook that validates the knowledge base entry before creation func (k *KnowledgeBase) BeforeCreate(tx *gorm.DB) error { if k.Priority < 1 { k.Priority = 1 } return nil } // BeforeUpdate is a GORM hook that validates the knowledge base entry before update func (k *KnowledgeBase) BeforeUpdate(tx *gorm.DB) error { if k.Priority < 1 { k.Priority = 1 } return nil } // IncrementViewCount increments the view count of a knowledge base entry func (k *KnowledgeBase) IncrementViewCount(tx *gorm.DB) error { return tx.Model(k).UpdateColumn("view_count", gorm.Expr("view_count + ?", 1)).Error } // MarkHelpful marks a knowledge base entry as helpful func (k *KnowledgeBase) MarkHelpful(tx *gorm.DB) error { return tx.Model(k).UpdateColumn("helpful", gorm.Expr("helpful + ?", 1)).Error } // MarkNotHelpful marks a knowledge base entry as not helpful func (k *KnowledgeBase) MarkNotHelpful(tx *gorm.DB) error { return tx.Model(k).UpdateColumn("not_helpful", gorm.Expr("not_helpful + ?", 1)).Error } // GetHelpfulnessPercentage returns the helpfulness percentage func (k *KnowledgeBase) GetHelpfulnessPercentage() float64 { total := k.Helpful + k.NotHelpful if total == 0 { return 0 } return float64(k.Helpful) / float64(total) * 100 }