89 lines
2.8 KiB
Go
89 lines
2.8 KiB
Go
// 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)
|
|
}
|