<?php
$request=json_decode(file_get_contents(__DIR__.'/private-dispatch-extra.json'),true);$path=parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH);require_once __DIR__.'/dispatch-gate.php';$reject=static function(){http_response_code(403);exit;};if(!$request||!cdxDispatchGate($request,$_SERVER['REQUEST_METHOD'],$path,$_POST,$_SERVER['HTTP_X_CDX_NONCE']??'',$_SERVER['HTTP_TOKEN']??''))$reject();$case=$request['case'];$label=$case['label']??'';if(!in_array($label,['E1','E2'],true))$reject();if(($label==='E1'&&($case['step']!==1||$case['params']!==['name'=>'CDXNW11D6A2-time-extra-evidence','order_no'=>'620003','function'=>'CDXNW11D6A2-extra-evidence']))||($label==='E2'&&$case['step']!==11))$reject();$lock=json_decode(file_get_contents(__DIR__.'/private-source-lock.json'),true);foreach($lock as $file=>$sha)if(hash_file('sha256',__DIR__.'/source/application/'.$file)!==$sha)$reject();$sent=__DIR__.'/private-sent-'.$label;$h=@fopen($sent,'x');if(!$h)$reject();chmod($sent,0600);fwrite($h,$request['nonce']);fclose($h);
require __DIR__.'/common-extra.php';$before=$source();$previous=$extraGuard($before);$check(($label==='E1'&&$previous===[])||($label==='E2'&&count($previous)===1),'Exact extra phase');$GLOBALS['CDX_PREPARED']=[];$GLOBALS['CDX_DML_COUNT']=0;$began=time();$body='';$error=null;$uuid=null;$nwSource=$source;$nwSave=$save;register_shutdown_function(static function()use($label,$nwSource,$nwSave){if(!is_file(__DIR__.'/private-case-'.$label.'.wire.json'))$nwSave('private-case-'.$label.'.shutdown.json',['after'=>$nwSource(),'prepared_SQL'=>$GLOBALS['CDX_PREPARED'],'fatal'=>error_get_last()]);});
try{
 $fields=$label==='E1'?$case['params']:['del_flag'=>'1'];$GLOBALS['CDX_WRITE_CTX']=['case'=>$case['step'],'label'=>$label,'lane'=>'B','table'=>'nutrition_time','op'=>$label==='E1'?'INSERT':'UPDATE','fields'=>$fields,'uuid'=>$case['params']['uuid']??null,'creator_sha'=>'efcac9c3ed28940cbd075c4b8bdd20c5a6165984c1f413546f9620b5e8b9d044','nonce'=>$_SERVER['HTTP_X_CDX_NONCE'],'expected_nonce'=>$request['nonce']];
 $GLOBALS['CDX_OWNER_ORACLE']=static function($table,$id,$insert)use($q,$p,$extraName,$check,$case){$check($table==='nutrition_time','Extra table only');if($insert)return (int)$q('SELECT COUNT(*) AS CNT FROM '.$p.$table.' WHERE UUID=?',[$id])[0]['cnt'];$lease=json_decode(file_get_contents(__DIR__.'/private-extra-state.json'),true);$check($id===$lease['uuid']&&$case['params']===['uuid'=>$lease['uuid']],'Exact extra leased UUID');$rows=$q('SELECT * FROM '.$p.$table.' WHERE UUID=?',[$id]);$check((int)$q('SELECT COUNT(*) AS CNT FROM '.$p.'nutrition WHERE USE_TIME LIKE ?', ['%'.$id.'%'])[0]['cnt']===0&&(int)$q('SELECT COUNT(*) AS CNT FROM '.$p.'nutrition_set WHERE USE_TIME=?',[$id])[0]['cnt']===0,'Extra absolutely no references');return count($rows)===1&&$rows[0]['name']===$extraName?1:0;};
 $_SERVER['PATH_INFO']=$path;require __DIR__.'/init-write.php';$response=\think\App::run();$body=$response->getContent();$status=$response->getCode();$decoded=json_decode($body,true);$check($status===200&&$decoded===['code'=>0,'message'=>$label==='E1'?'服用时间新建成功':'删除营养品成功','data'=>[]],'Extra actual business result');$after=$source();$rows=$extraGuard($after);$check(count($rows)===1&&$GLOBALS['CDX_DML_COUNT']===1,'Sole extra native DML');$row=$rows[0];$uuid=$row['uuid'];
 if($label==='E1'){$check(count($row)===9&&(int)$row['id']>0&&preg_match('/^[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-F0-9]{12}$/D',$uuid),'Extra complete/generated columns');foreach($case['params'] as $key=>$value)$check((string)$row[$key]===$value,'Extra inserted field '.$key);$check((int)$row['status']===1&&(int)$row['del_flag']===0&&hash('sha256',$row['create_by'])==='efcac9c3ed28940cbd075c4b8bdd20c5a6165984c1f413546f9620b5e8b9d044','Extra defaults/actual creator');$clock=strtotime($row['create_time']);$check($clock>=$began-1&&$clock<=time()+1,'Extra actual API clock');$check((int)$q('SELECT COUNT(*) AS CNT FROM '.$p.'nutrition_time WHERE UUID=?',[$uuid])[0]['cnt']===1,'Independent extra UUID singular');}
 else{$expect=$previous[0];$expect['del_flag']=$row['del_flag'];$check((int)$row['del_flag']===1&&$row===$expect,'Extra only del_flag changed');}
}catch(Throwable $e){$error=['class'=>get_class($e),'message'=>$e->getMessage(),'trace'=>$e->getTraceAsString()];$status=500;$after=$source();}
$save('private-case-'.$label.'.wire.json',['lane'=>'B','case'=>$case,'HTTP'=>$status,'body'=>$body,'body_sha256'=>hash('sha256',$body),'before'=>$before,'after'=>$after,'prepared_SQL'=>$GLOBALS['CDX_PREPARED'],'oracle_native_SELECT'=>$GLOBALS['ORACLE_JOURNAL'],'uuid'=>$uuid,'DML'=>$GLOBALS['CDX_DML_COUNT'],'error'=>$error,'source_sha'=>$lock]);http_response_code($status);header('Content-Type: application/json');echo $error?'{"harness_failed":true}':$body;
