feat: 迁移plant
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
package logic
|
||||
|
||||
import (
|
||||
plantModel "sundynix-micro-go/app/plant/model"
|
||||
"sundynix-micro-go/app/plant/rpc/plant"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func wikiRelationIDs(db *gorm.DB, wikiID string) (classIDs, ossIDs, relatedWikiIDs []string) {
|
||||
var classes []plantModel.WikiClassRelation
|
||||
_ = db.Where("wiki_id = ?", wikiID).Find(&classes).Error
|
||||
for _, item := range classes {
|
||||
classIDs = append(classIDs, item.ClassID)
|
||||
}
|
||||
|
||||
var ossList []plantModel.WikiOss
|
||||
_ = db.Where("wiki_id = ?", wikiID).Find(&ossList).Error
|
||||
for _, item := range ossList {
|
||||
ossIDs = append(ossIDs, item.OssID)
|
||||
}
|
||||
|
||||
var related []plantModel.WikiRelated
|
||||
_ = db.Where("wiki_id = ?", wikiID).Find(&related).Error
|
||||
for _, item := range related {
|
||||
relatedWikiIDs = append(relatedWikiIDs, item.RelatedWikiID)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func wikiInfoFromModel(db *gorm.DB, item plantModel.Wiki) *plant.WikiInfo {
|
||||
classIDs, ossIDs, relatedWikiIDs := wikiRelationIDs(db, item.ID)
|
||||
return &plant.WikiInfo{
|
||||
Id: item.ID,
|
||||
Name: item.Name,
|
||||
LatinName: item.LatinName,
|
||||
Aliases: item.Aliases,
|
||||
Genus: item.Genus,
|
||||
Difficulty: int32(item.Difficulty),
|
||||
IsHot: int32(item.IsHot),
|
||||
GrowthHabit: item.GrowthHabit,
|
||||
LightIntensity: item.LightIntensity,
|
||||
OptimalTempPeriod: item.OptimalTempPeriod,
|
||||
CreatedAt: item.CreatedAt.Unix(),
|
||||
ClassId: item.ClassID,
|
||||
DistributionArea: item.DistributionArea,
|
||||
LifeCycle: item.LifeCycle,
|
||||
ClassIds: classIDs,
|
||||
OssIds: ossIDs,
|
||||
RelatedWikiIds: relatedWikiIDs,
|
||||
IsVectorSynced: item.IsVectorSynced == 1,
|
||||
ReproductionMethod: item.ReproductionMethod,
|
||||
PestsDiseases: item.PestsDiseases,
|
||||
LightType: item.LightType,
|
||||
Stem: item.Stem,
|
||||
Fruit: item.Fruit,
|
||||
FoliageType: item.FoliageType,
|
||||
FoliageColor: item.FoliageColor,
|
||||
FoliageShape: item.FoliageShape,
|
||||
Height: int32(item.Height),
|
||||
FloweringPeriod: item.FloweringPeriod,
|
||||
FloweringColor: item.FloweringColor,
|
||||
FloweringShape: item.FloweringShape,
|
||||
FloweringDiameter: int32(item.FlowerDiameter),
|
||||
}
|
||||
}
|
||||
|
||||
func replaceWikiRelations(tx *gorm.DB, wikiID string, classIDs, ossIDs, relatedWikiIDs []string) error {
|
||||
if err := tx.Where("wiki_id = ?", wikiID).Delete(&plantModel.WikiClassRelation{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Where("wiki_id = ?", wikiID).Delete(&plantModel.WikiOss{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Where("wiki_id = ?", wikiID).Delete(&plantModel.WikiRelated{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, classID := range classIDs {
|
||||
if classID == "" {
|
||||
continue
|
||||
}
|
||||
if err := tx.Create(&plantModel.WikiClassRelation{WikiID: wikiID, ClassID: classID}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for _, ossID := range ossIDs {
|
||||
if ossID == "" {
|
||||
continue
|
||||
}
|
||||
if err := tx.Create(&plantModel.WikiOss{WikiID: wikiID, OssID: ossID}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for _, relatedID := range relatedWikiIDs {
|
||||
if relatedID == "" || relatedID == wikiID {
|
||||
continue
|
||||
}
|
||||
if err := tx.Create(&plantModel.WikiRelated{WikiID: wikiID, RelatedWikiID: relatedID}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user