<?php
declare(strict_types=1);require __DIR__.'/bootstrap.php';$check(!is_file($runtime.'/fixture-journal.json'),'No preparation replay');$old=json_decode(file_get_contents('/tmp/cdx-ai-order-recharge-read-20261011/private/evidence/fixture-journal.json'),true);$template=json_decode(file_get_contents(__DIR__.'/fixture-values-template.json'),true);$meta=json_decode(file_get_contents(__DIR__.'/structure-'.$lane.'.json'),true);$before=$own();foreach(['user','upload_file','goods','order','order_goods'] as $t)$check($before[$t]===$old['after'][$t],'Existing proved owner rows '.$t);foreach(['order_delivery','order_delivery_goods','order_refund','order_refund_image','order_refund_address','order_address','payment_trade','express'] as $t)$check($before[$t]===[],'No new own collision '.$t);foreach($meta['tables'] as $t=>$m)$check($m['foreign_keys']===0&&$m['triggers']===0,'No side-effect metadata '.$t);$quote=static function($k)use($dm){return $dm?'"'.strtoupper($k).'"':'`'.$k.'`';};$plan=[];
foreach($tenants as $module=>$tenant)foreach(['order_delivery'=>'delivery_id','order_delivery_goods'=>'id','order_refund'=>'order_refund_id','order_refund_image'=>'id'] as $table=>$pk){$row=$template['tables'][$module][$table];$expected=array_column($meta['tables'][$table]['columns'],'column_name');$cols=array_keys($row);$full=$cols;$full[]=$pk;sort($full);sort($expected);$check($full===$expected,'All nonPK columns explicit '.$table);foreach($meta['tables'][$table]['columns'] as $c){if($c['column_name']===$pk){if($dm){$ddl=$read("SELECT DBMS_METADATA.GET_DDL('TABLE',?,'AIZHCT_APP') ddl FROM DUAL",[strtoupper('yoshop_'.$table)])[0]['ddl'];$check(preg_match('/"'.strtoupper($pk).'"[^,\n]*(?:IDENTITY\s*\(|AUTO_INCREMENT\b)/i',$ddl)===1,'Actual DB generated PK');}else $check($c['extra']==='auto_increment','Actual MySQL generated PK');continue;}$v=$row[$c['column_name']];$max=$c['character_maximum_length']??null;if($max!==null&&is_string($v)&&strpos($v,'@')!==0)$check(mb_strlen($v,'UTF-8')<=(int)$max,'Exact column length');if($c['data_type']==='decimal')$check($v==='0.00','No financial nonzero');}$sql='INSERT INTO yoshop_'.$table.' ('.implode(',',array_map($quote,$cols)).') VALUES ('.implode(',',array_fill(0,count($cols),'?')).')';$db->prepare($sql);$plan[$module][$table]=$sql;}
$journal=['lane'=>$lane,'before'=>$before,'before_protect'=>$protect(),'owned'=>$old['owned'],'dml'=>[],'committed'=>false,'template_sha256'=>hash_file('sha256',__DIR__.'/fixture-values-template.json')];$persist('fixture-journal.json',$journal);$db->beginTransaction();try{foreach($tenants as $module=>$tenant){$ids=$old['owned'][$module];$order=($query($db,'SELECT * FROM yoshop_order WHERE order_id=? AND store_id=?',[$ids['order'],$tenant]))[0];$check($order['order_no']==='CDXCM11F782_'.$module&&(int)$order['order_status']===20&&(int)$order['pay_status']===10,'Only existing cancelled unpaid owner');$refs=['@existing_proven_own_cancelled_order_id'=>$ids['order'],'@existing_proven_own_order_goods_id'=>$ids['order_goods'],'@existing_proven_own_goods_id'=>$ids['goods'],'@existing_proven_own_user_id'=>$ids['user'],'@existing_proven_own_local_metadata_file_id'=>$ids['upload_file']];foreach(['order_delivery'=>'delivery_id','order_delivery_goods'=>'id','order_refund'=>'order_refund_id','order_refund_image'=>'id'] as $t=>$pk){$row=$template['tables'][$module][$t];foreach($row as &$v)if(is_string($v)&&strpos($v,'@')===0){$check(isset($refs[$v]),'Only exact approved relation reference');$v=$refs[$v];}unset($v);$s=$db->prepare($plan[$module][$t]);$s->execute(array_values($row));$got=$query($db,'SELECT '.$pk.' FROM yoshop_'.$t.' WHERE store_id=?',[$tenant]);$check(count($got)===1,'Own generated identity exact row');$id=(int)$got[0][$pk];$journal['owned'][$module][$t]=$id;$journal['dml'][]=['table'=>$t,'values'=>$row,'generated_PK'=>$id];if($t==='order_delivery')$refs['@own_new_delivery_id']=$id;if($t==='order_refund')$refs['@own_new_refund_id']=$id;$persist('fixture-journal.json',$journal);}}
$db->commit();$journal['committed']=true;$journal['after']=$own();$journal['after_protect']=$protect();$check($journal['before_protect']===$journal['after_protect'],'Natural counts unchanged');foreach(['user','upload_file','goods','order','order_goods','order_address','payment_trade','express','order_refund_address'] as $t)$check($journal['before'][$t]===$journal['after'][$t],'Prior full rows unchanged '.$t);$persist('fixture-journal.json',$journal);echo json_encode(['lane'=>$lane,'fixture_INSERT'=>8,'UPDATE'=>0,'API_DML'=>0,'own_new_ids'=>array_map(static function($a){return array_intersect_key($a,array_flip(['order_delivery','order_delivery_goods','order_refund','order_refund_image']));},$journal['owned']),'natural_unchanged'=>true]),"\n";}catch(Throwable $e){if($db->inTransaction())$db->rollBack();$journal['failed']=get_class($e);$persist('fixture-journal.json',$journal);throw $e;}
