modelRT/database/fill_identity_token_model.go

89 lines
2.8 KiB
Go
Raw Normal View History

2025-11-04 17:12:15 +08:00
// Package database define database operation functions
package database
import (
"context"
"fmt"
2025-11-04 17:12:15 +08:00
"strings"
"modelRT/logger"
2025-11-04 17:12:15 +08:00
"modelRT/model"
"modelRT/orm"
2025-11-04 17:12:15 +08:00
"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
2025-11-04 17:12:15 +08:00
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
2025-11-04 17:12:15 +08:00
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],
2025-11-04 17:12:15 +08:00
}
err := FillingShortTokenModel(ctx, tx, shortIndentModel)
2025-11-04 17:12:15 +08:00
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],
2025-11-04 17:12:15 +08:00
}
err := FillingLongTokenModel(ctx, tx, longIndentModel)
2025-11-04 17:12:15 +08:00
if err != nil {
return nil, err
}
return longIndentModel, nil
2025-11-04 17:12:15 +08:00
}
return nil, fmt.Errorf("invalid identity token format: %s", identToken)
2025-11-04 17:12:15 +08:00
}