77 lines
2.3 KiB
Go
77 lines
2.3 KiB
Go
package run
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"git.iwork-ai.com/xdc/iqudo-top1/internal/model"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type KnowledgeView struct {
|
|
CardID uint64 `json:"card_id"`
|
|
CardVersionID uint64 `json:"card_version_id"`
|
|
Version int `json:"version"`
|
|
Title string `json:"title"`
|
|
StandardCopy string `json:"standard_copy"`
|
|
ForbiddenCopy string `json:"forbidden_copy"`
|
|
RiskNote string `json:"risk_note"`
|
|
}
|
|
|
|
type NodeView struct {
|
|
model.SOPNode
|
|
Knowledge *KnowledgeView `json:"knowledge,omitempty"`
|
|
}
|
|
|
|
type knowledgeNodeConfig struct {
|
|
KnowledgeCardID uint64 `json:"knowledge_card_id"`
|
|
KnowledgeCardVersionID uint64 `json:"knowledge_card_version_id"`
|
|
}
|
|
|
|
func (h *Handler) nodeView(db *gorm.DB, node model.SOPNode, tenantID uint64) (NodeView, error) {
|
|
view := NodeView{SOPNode: node}
|
|
if node.Type != "knowledge" {
|
|
return view, nil
|
|
}
|
|
knowledge, err := loadKnowledgeView(db, node, tenantID)
|
|
if err != nil {
|
|
return view, err
|
|
}
|
|
view.Knowledge = &knowledge
|
|
return view, nil
|
|
}
|
|
|
|
func loadKnowledgeView(db *gorm.DB, node model.SOPNode, tenantID uint64) (KnowledgeView, error) {
|
|
var config knowledgeNodeConfig
|
|
if err := json.Unmarshal(node.Config, &config); err != nil {
|
|
return KnowledgeView{}, err
|
|
}
|
|
type row struct {
|
|
model.KnowledgeCardVersion
|
|
Title string `gorm:"column:title"`
|
|
}
|
|
var version row
|
|
query := db.Table("knowledge_card_versions kv").Select("kv.*, kc.title").
|
|
Joins("JOIN knowledge_cards kc ON kc.id = kv.knowledge_card_id").
|
|
Where("kv.tenant_id = ? AND kc.tenant_id = ? AND kv.knowledge_card_id = ?", tenantID, tenantID, config.KnowledgeCardID)
|
|
if config.KnowledgeCardVersionID != 0 {
|
|
query = query.Where("kv.id = ?", config.KnowledgeCardVersionID)
|
|
} else {
|
|
query = query.Where("kv.status = ?", "published").Order("kv.version DESC")
|
|
}
|
|
if err := query.First(&version).Error; err != nil {
|
|
return KnowledgeView{}, err
|
|
}
|
|
var content struct {
|
|
StandardCopy string `json:"standard_copy"`
|
|
ForbiddenCopy string `json:"forbidden_copy"`
|
|
RiskNote string `json:"risk_note"`
|
|
}
|
|
if err := json.Unmarshal(version.Content, &content); err != nil {
|
|
return KnowledgeView{}, err
|
|
}
|
|
return KnowledgeView{
|
|
CardID: version.KnowledgeCardID, CardVersionID: version.ID, Version: version.Version, Title: version.Title,
|
|
StandardCopy: content.StandardCopy, ForbiddenCopy: content.ForbiddenCopy, RiskNote: content.RiskNote,
|
|
}, nil
|
|
}
|