diff --git a/model/attribute_group_model.go b/model/attribute_group_model.go new file mode 100644 index 0000000..b9c25ba --- /dev/null +++ b/model/attribute_group_model.go @@ -0,0 +1,50 @@ +// Package model define model struct of model runtime service +package model + +import ( + "context" + "fmt" + + "modelRT/logger" + "modelRT/orm" + + "gorm.io/gorm" +) + +// TraverseAttributeGroupTables define func to traverse component attribute group tables +func TraverseAttributeGroupTables(ctx context.Context, db *gorm.DB) error { + var tableNames []string + + result := db.Model(&orm.ProjectManager{}).Pluck("name", &tableNames) + fmt.Println(result) + if result.Error != nil && result.Error != gorm.ErrRecordNotFound { + logger.Error(ctx, "query name column data from postgres table failed", "err", result.Error) + } + + if len(tableNames) == 0 { + logger.Info(ctx, "query from postgres successed, but no records found") + return nil + } + + for _, tableName := range tableNames { + if tableName == "" { + continue + } + + exists := db.Migrator().HasTable(tableName) + if !exists { + logger.Warn(ctx, fmt.Sprintf("table %s does not exist in the database", tableName)) + } + + // TODO 优化返回结构,尝试首先获取表的结构 + var records []map[string]any + err := db.Table(tableName).Find(&records).Error + if err != nil && err != gorm.ErrRecordNotFound { + logger.Error(ctx, fmt.Sprintf("query table '%s' data failed", tableName), "table_name", tableName, "err", err) + continue + } + // TODO 将筛选后的属性值加入到缓存系统中 + } + + return nil +} diff --git a/model/redis_recommend.go b/model/redis_recommend.go index a553880..03dc325 100644 --- a/model/redis_recommend.go +++ b/model/redis_recommend.go @@ -147,7 +147,7 @@ func RedisSearchRecommend(ctx context.Context, input string) map[string]SearchRe for range 2 { result := <-fanInChan if result.Err != nil { - logger.Error(ctx, "exec redis fuzzy search by key :%s failed", "query_key", result.RecommendType, "error", result.Err) + logger.Error(ctx, "exec redis fuzzy search by key failed", "recommend_type", result.RecommendType, "error", result.Err) continue } if result.RecommendType == constants.CompNSPathRecommendHierarchyType { @@ -265,11 +265,11 @@ func queryMemberFromSpecificsLevel(ctx context.Context, rdb *redis.Client, hiera } func getAllKeyByGridLevel(ctx context.Context, rdb *redis.Client, fanInChan chan SearchResult) { - queryKey := constants.RedisAllGridSetKey + setKey := constants.RedisAllGridSetKey hierarchy := constants.GridRecommendHierarchyType - members, err := rdb.SMembers(ctx, queryKey).Result() - if err != nil { - logger.Error(ctx, "get all members by special key failed", "key", queryKey, "op", "SMembers", "error", err) + members, err := rdb.SMembers(ctx, setKey).Result() + if err != nil && err != redigo.ErrNil { + logger.Error(ctx, "get all members from redis by special key failed", "key", setKey, "op", "SMembers", "error", err) fanInChan <- SearchResult{ RecommendType: hierarchy, @@ -292,7 +292,7 @@ func getAllKeyByNSPathLevel(ctx context.Context, rdb *redis.Client, fanInChan ch queryKey := constants.RedisAllCompNSPathSetKey hierarchy := constants.CompNSPathRecommendHierarchyType members, err := rdb.SMembers(ctx, queryKey).Result() - if err != nil { + if err != nil && err != redigo.ErrNil { logger.Error(ctx, "get all members by special key failed", "key", queryKey, "op", "SMembers", "error", err) fanInChan <- SearchResult{ @@ -380,7 +380,7 @@ func handleLevelFuzzySearch(ctx context.Context, rdb *redis.Client, hierarchy co } members, err := queryMemberFromSpecificsLevel(ctx, rdb, hierarchy, specificalKey) - if err != nil { + if err != nil && err != redis.Nil { logger.Error(ctx, "query members from redis by special key failed", "key", specificalKey, "member", searchInput, "op", "SMember", "error", err) fanInChan <- SearchResult{ RecommendType: hierarchy, diff --git a/orm/project_manager.go b/orm/project_manager.go new file mode 100644 index 0000000..b84e9c1 --- /dev/null +++ b/orm/project_manager.go @@ -0,0 +1,19 @@ +// Package orm define database data struct +package orm + +// ProjectManager define struct to manager component attribute tables +type ProjectManager struct { + ID int32 `gorm:"primaryKey;column:id"` + Name string `gorm:"column:name;type:varchar(64);not null"` + Tag string `gorm:"column:tag;type:varchar(64);not null"` + MetaModel string `gorm:"column:meta_model;type:varchar(64);not null"` + GroupName string `gorm:"column:group_name;type:varchar(64);not null"` + LinkType int32 `gorm:"column:link_type;type:integer;not null;default:0"` + CheckState JSONMap `gorm:"column:check_state;type:jsonb;not null;default:'{}'"` + IsPublic bool `gorm:"column:ispublic;type:boolean;not null;default:false"` +} + +// TableName func respresent return table name of Page +func (p *ProjectManager) TableName() string { + return "project_manager" +}