@@ -217,8 +217,23 @@ func (b *BadgerDB) FindModel(id uint64, modelType string, result interface{}) er
217217 // 反序列化到结果
218218 return json .Unmarshal (ruleJSON , result )
219219 default :
220- // 其他类型的记录,使用标准处理方式
221- return json .Unmarshal (data , result )
220+ // 其他类型的记录,也需要进行字段类型转换
221+ var dataMap map [string ]interface {}
222+ if err := json .Unmarshal (data , & dataMap ); err != nil {
223+ return err
224+ }
225+
226+ // 转换字段类型,确保布尔字段正确
227+ convertDbFieldTypes (& dataMap )
228+
229+ // 重新序列化为 JSON
230+ dataJSON , err := json .Marshal (dataMap )
231+ if err != nil {
232+ return err
233+ }
234+
235+ // 反序列化到结果
236+ return json .Unmarshal (dataJSON , result )
222237 }
223238}
224239
@@ -495,18 +510,151 @@ func (b *BadgerDB) FindAll(prefix string, result interface{}) error {
495510 }
496511
497512 return nil
513+ case "api_token" :
514+ // API令牌记录需要特殊处理布尔字段和Token字段
515+ var tokens []* map [string ]interface {}
516+ for _ , item := range items {
517+ var data map [string ]interface {}
518+ if err := json .Unmarshal (item , & data ); err != nil {
519+ continue
520+ }
521+
522+ // 转换字段类型,确保布尔字段正确
523+ convertDbFieldTypes (& data )
524+ tokens = append (tokens , & data )
525+ }
526+
527+ // 重新序列化为 JSON
528+ tokensJSON , err := json .Marshal (tokens )
529+ if err != nil {
530+ return err
531+ }
532+
533+ // 反序列化到结果,然后手动设置Token字段
534+ if err := json .Unmarshal (tokensJSON , result ); err != nil {
535+ return err
536+ }
537+
538+ // 手动设置Token字段(因为它可能有json:"-"标签)
539+ if tokenSlice , ok := result .(* []* model.ApiToken ); ok {
540+ for i , token := range * tokenSlice {
541+ if token != nil && i < len (tokens ) {
542+ tokenData := tokens [i ]
543+ if tokenVal , exists := (* tokenData )["Token" ]; exists {
544+ if tokenStr , isStr := tokenVal .(string ); isStr {
545+ token .Token = tokenStr
546+ }
547+ }
548+ }
549+ }
550+ }
551+
552+ return nil
553+ case "ddns_profile" :
554+ // DDNS配置记录需要特殊处理布尔字段
555+ var profiles []* map [string ]interface {}
556+ for _ , item := range items {
557+ var data map [string ]interface {}
558+ if err := json .Unmarshal (item , & data ); err != nil {
559+ continue
560+ }
561+
562+ // 转换字段类型,确保布尔字段正确
563+ convertDbFieldTypes (& data )
564+ profiles = append (profiles , & data )
565+ }
566+
567+ // 重新序列化为 JSON
568+ profilesJSON , err := json .Marshal (profiles )
569+ if err != nil {
570+ return err
571+ }
572+
573+ return json .Unmarshal (profilesJSON , result )
574+ case "notification" :
575+ // 通知配置记录需要特殊处理布尔字段
576+ var notifications []* map [string ]interface {}
577+ for _ , item := range items {
578+ var data map [string ]interface {}
579+ if err := json .Unmarshal (item , & data ); err != nil {
580+ continue
581+ }
582+
583+ // 转换字段类型,确保布尔字段正确
584+ convertDbFieldTypes (& data )
585+ notifications = append (notifications , & data )
586+ }
587+
588+ // 重新序列化为 JSON
589+ notificationsJSON , err := json .Marshal (notifications )
590+ if err != nil {
591+ return err
592+ }
593+
594+ return json .Unmarshal (notificationsJSON , result )
595+ case "nat" :
596+ // NAT配置记录需要特殊处理布尔字段
597+ var nats []* map [string ]interface {}
598+ for _ , item := range items {
599+ var data map [string ]interface {}
600+ if err := json .Unmarshal (item , & data ); err != nil {
601+ continue
602+ }
603+
604+ // 转换字段类型,确保布尔字段正确
605+ convertDbFieldTypes (& data )
606+ nats = append (nats , & data )
607+ }
608+
609+ // 重新序列化为 JSON
610+ natsJSON , err := json .Marshal (nats )
611+ if err != nil {
612+ return err
613+ }
614+
615+ return json .Unmarshal (natsJSON , result )
616+ case "cron" :
617+ // 定时任务记录需要特殊处理布尔字段
618+ var crons []* map [string ]interface {}
619+ for _ , item := range items {
620+ var data map [string ]interface {}
621+ if err := json .Unmarshal (item , & data ); err != nil {
622+ continue
623+ }
624+
625+ // 转换字段类型,确保布尔字段正确
626+ convertDbFieldTypes (& data )
627+ crons = append (crons , & data )
628+ }
629+
630+ // 重新序列化为 JSON
631+ cronsJSON , err := json .Marshal (crons )
632+ if err != nil {
633+ return err
634+ }
635+
636+ return json .Unmarshal (cronsJSON , result )
498637 default :
499- // 其他类型的记录,使用标准处理方式
500- itemsJSON := "["
501- for i , item := range items {
502- if i > 0 {
503- itemsJSON += ","
638+ // 其他类型的记录,也需要进行字段类型转换
639+ var others []* map [string ]interface {}
640+ for _ , item := range items {
641+ var data map [string ]interface {}
642+ if err := json .Unmarshal (item , & data ); err != nil {
643+ continue
504644 }
505- itemsJSON += string (item )
645+
646+ // 转换字段类型,确保布尔字段正确
647+ convertDbFieldTypes (& data )
648+ others = append (others , & data )
649+ }
650+
651+ // 重新序列化为 JSON
652+ othersJSON , err := json .Marshal (others )
653+ if err != nil {
654+ return err
506655 }
507- itemsJSON += "]"
508656
509- return json .Unmarshal ([] byte ( itemsJSON ) , result )
657+ return json .Unmarshal (othersJSON , result )
510658 }
511659}
512660
0 commit comments