// Package database define database operation functions package database import ( "context" "errors" "strings" "modelRT/model" "gorm.io/gorm" ) // ParseAttrToken define return the attribute model interface based on the input attribute token func ParseAttrToken(ctx context.Context, tx *gorm.DB, attrToken string) (model.AttrModelInterface, error) { attrSlice := strings.Split(attrToken, ".") attrLen := len(attrSlice) if attrLen == 4 { short := &model.ShortAttrInfo{ AttrGroupName: attrSlice[2], AttrKey: attrSlice[3], // TODO use redis query // AttrValue: attrSlice[2], } err := FillingShortAttrModel(ctx, tx, attrSlice, short) if err != nil { return nil, err } return short, nil } else if attrLen == 7 { long := &model.LongAttrInfo{ AttrGroupName: attrSlice[5], AttrKey: attrSlice[6], // TODO use redis query // AttrValue: attrSlice[5], } err := FillingLongAttrModel(ctx, tx, attrSlice, long) if err != nil { return nil, err } 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 := QueryGridByName(ctx, tx, attrItems[0]) if err != nil { return err } attrModel.GridInfo = &grid zone, err := QueryZoneByName(ctx, tx, attrItems[1]) if err != nil { return err } attrModel.ZoneInfo = &zone station, err := QueryStationByName(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 }