105 lines
3.2 KiB
Go
105 lines
3.2 KiB
Go
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
|
|
}
|