// Package database define database operation functions package database import ( "context" "errors" "fmt" "strings" "modelRT/diagram" "modelRT/model" "gorm.io/gorm" ) // ParseAttrToken define return the attribute model interface based on the input attribute token. doc addr http://server.baseware.net:6875/books/product-design-docs/page/d6baf func ParseAttrToken(ctx context.Context, tx *gorm.DB, attrToken, clientToken string) (model.AttrModelInterface, error) { rs := diagram.NewRedisString(ctx, attrToken, clientToken, 10, true) attrSlice := strings.Split(attrToken, ".") attrLen := len(attrSlice) if attrLen == 4 { short := &model.ShortAttrInfo{ AttrGroupName: attrSlice[2], AttrKey: attrSlice[3], } err := FillingShortAttrModel(ctx, tx, attrSlice, short) if err != nil { return nil, err } attrValue, err := rs.Get(attrToken) if err != nil { return nil, err } short.AttrValue = attrValue return short, nil } else if attrLen == 7 { long := &model.LongAttrInfo{ AttrGroupName: attrSlice[5], AttrKey: attrSlice[6], } err := FillingLongAttrModel(ctx, tx, attrSlice, long) if err != nil { return nil, err } attrValue, err := rs.Get(attrToken) if err != nil { return nil, err } long.AttrValue = attrValue return long, nil } return nil, errors.New("invalid attribute token format") } // FillingShortAttrModel define filling short attribute model info func FillingShortAttrModel(ctx context.Context, tx *gorm.DB, attrItems []string, attrModel *model.ShortAttrInfo) error { component, err := QueryComponentByNsPath(ctx, tx, attrItems[0]) if err != nil { return err } attrModel.ComponentInfo = &component return nil } // FillingLongAttrModel define filling long attribute model info func FillingLongAttrModel(ctx context.Context, tx *gorm.DB, attrItems []string, attrModel *model.LongAttrInfo) error { grid, err := QueryGridByTagName(ctx, tx, attrItems[0]) if err != nil { return err } attrModel.GridInfo = &grid zone, err := QueryZoneByTagName(ctx, tx, attrItems[1]) if err != nil { return err } attrModel.ZoneInfo = &zone station, err := QueryStationByTagName(ctx, tx, attrItems[2]) if err != nil { return err } attrModel.StationInfo = &station component, err := QueryComponentByNsPath(ctx, tx, attrItems[3]) if err != nil { return err } attrModel.ComponentInfo = &component return nil } // QueryAttrValueFromRedis define query attribute value from redis by attrKey func QueryAttrValueFromRedis(attrKey string) string { fmt.Println(attrKey) return "" }