// Package database define database operation functions package database import ( "context" "fmt" "strings" "modelRT/logger" "modelRT/model" "modelRT/orm" "gorm.io/gorm" ) // FillingShortTokenModel define filling short token model info func FillingShortTokenModel(ctx context.Context, tx *gorm.DB, identModel *model.ShortIdentityTokenModel) error { filterComponent := &orm.Component{ GridTag: identModel.GetGridTag(), ZoneTag: identModel.GetZoneTag(), StationTag: identModel.GetStationTag(), } component, measurement, err := QueryLongIdentModelInfoByToken(ctx, tx, identModel.MeasurementTag, filterComponent) if err != nil { logger.Error(ctx, "query long identity token model info failed", "error", err) return err } identModel.ComponentInfo = component identModel.MeasurementInfo = measurement return nil } // FillingLongTokenModel define filling long token model info func FillingLongTokenModel(ctx context.Context, tx *gorm.DB, identModel *model.LongIdentityTokenModel) error { filterComponent := &orm.Component{ GridTag: identModel.GetGridTag(), ZoneTag: identModel.GetZoneTag(), StationTag: identModel.GetStationTag(), Tag: identModel.GetComponentTag(), } component, measurement, err := QueryLongIdentModelInfoByToken(ctx, tx, identModel.MeasurementTag, filterComponent) if err != nil { logger.Error(ctx, "query long identity token model info failed", "error", err) return err } identModel.ComponentInfo = component identModel.MeasurementInfo = measurement return nil } // ParseDataIdentifierToken define function to parse data identifier token function func ParseDataIdentifierToken(ctx context.Context, tx *gorm.DB, identToken string) (model.IndentityTokenModelInterface, error) { identSlice := strings.Split(identToken, ".") identSliceLen := len(identSlice) if identSliceLen == 4 { // token1.token2.token3.token4.token7 shortIndentModel := &model.ShortIdentityTokenModel{ GridTag: identSlice[0], ZoneTag: identSlice[1], StationTag: identSlice[2], NamespacePath: identSlice[3], MeasurementTag: identSlice[6], } err := FillingShortTokenModel(ctx, tx, shortIndentModel) if err != nil { return nil, err } return shortIndentModel, nil } else if identSliceLen == 7 { // token1.token2.token3.token4.token5.token6.token7 longIndentModel := &model.LongIdentityTokenModel{ GridTag: identSlice[0], ZoneTag: identSlice[1], StationTag: identSlice[2], NamespacePath: identSlice[3], ComponentTag: identSlice[4], AttributeGroup: identSlice[5], MeasurementTag: identSlice[6], } err := FillingLongTokenModel(ctx, tx, longIndentModel) if err != nil { return nil, err } return longIndentModel, nil } return nil, fmt.Errorf("invalid identity token format: %s", identToken) }