committtttt
This commit is contained in:
85
backend/internal/models/knowledge.go
Normal file
85
backend/internal/models/knowledge.go
Normal file
@@ -0,0 +1,85 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user