diff --git a/block_parser/action_did_cell.go b/block_parser/action_did_cell.go index 33dc8c7..232aa9f 100644 --- a/block_parser/action_did_cell.go +++ b/block_parser/action_did_cell.go @@ -89,8 +89,22 @@ func (b *BlockParser) ActionEditDidCellOwner(req *FuncTransactionHandleReq) (res LockCodeHash: req.Tx.Outputs[didEntity.Target.Index].Lock.CodeHash.Hex(), } + var recordsInfos []tables.TableRecordsInfo + recordList := didEntity.DidCellWitnessDataV0.Records + for _, v := range recordList { + recordsInfos = append(recordsInfos, tables.TableRecordsInfo{ + AccountId: accountId, + Account: account, + Key: v.Key, + Type: v.Type, + Label: v.Label, + Value: v.Value, + Ttl: strconv.FormatUint(uint64(v.TTL), 10), + }) + } + oldOutpoint := common.OutPointStruct2String(req.Tx.Inputs[0].PreviousOutput) - if err := b.DbDao.EditDidCellOwner(oldOutpoint, didCellInfo); err != nil { + if err := b.DbDao.EditDidCellOwner(oldOutpoint, didCellInfo, recordsInfos); err != nil { log.Error("EditDidCellOwner err:", err.Error()) resp.Err = fmt.Errorf("EditDidCellOwner err: %s", err.Error()) } diff --git a/dao/t_did_cell_info.go b/dao/t_did_cell_info.go index 46e897e..79d46f1 100644 --- a/dao/t_did_cell_info.go +++ b/dao/t_did_cell_info.go @@ -26,15 +26,23 @@ func (d *DbDao) CreateDidCellRecordsInfos(outpoint string, didCellInfo tables.Ta }) } -func (d *DbDao) EditDidCellOwner(outpoint string, didCellInfo tables.TableDidCellInfo) error { +func (d *DbDao) EditDidCellOwner(outpoint string, didCellInfo tables.TableDidCellInfo, recordsInfos []tables.TableRecordsInfo) error { return d.db.Transaction(func(tx *gorm.DB) error { if err := tx.Select("outpoint", "block_number", "args", "lock_code_hash"). Where("outpoint = ?", outpoint). Updates(didCellInfo).Error; err != nil { return err } + if err := tx.Where("account_id = ?", didCellInfo.AccountId). + Delete(&tables.TableRecordsInfo{}).Error; err != nil { + return err + } + if len(recordsInfos) > 0 { + if err := tx.Create(&recordsInfos).Error; err != nil { + return err + } + } return nil - }) }