modelRT/model/attribute_group_model.go

73 lines
1.8 KiB
Go

// Package model define model struct of model runtime service
package model
import (
"context"
"errors"
"fmt"
"log"
"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
}
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)
return err
}
migrator := db.Migrator()
if exists := migrator.HasTable(tableName); !exists {
err := errors.New("can not find special table into database")
logger.Error(ctx, "table does not exist in the database", "table _name", tableName, "error", err)
return err
}
columnTypes, err := migrator.ColumnTypes(tableName)
if err != nil {
logger.Error(ctx, "retrieving column structure for table failed", "table _name", tableName, "error", err)
return err
}
tableSchema := make(map[string]gorm.ColumnType)
for _, col := range columnTypes {
name := col.Name()
dataType, _ := col.ColumnType()
log.Printf("column: %s, Type: %s", name, dataType)
if name != "id" {
tableSchema[name] = col
}
}
// TODO 将筛选后的属性值加入到缓存系统中
}
return nil
}