<?php
require __DIR__.'/db.php';$lease=json_decode(file_get_contents(__DIR__.'/private-lease.json'),true);
$state=static function()use($q,$p,$lease,$check):array{$result=[];foreach(['syllabus_evaluate','syllabus_evaluate_ext']as $t){$r=$q('SELECT * FROM '.$p.$t.' ORDER BY ID');foreach($r as $row)foreach($row as $v)$check(!is_string($v)||strlen($v)<=262144,'Field cap256KiB');$result[$t]=$r;}$result['staff']=$q('SELECT * FROM '.$p.'staff WHERE UUID=?',[$lease['staff_uuid']]);$result['user']=$q('SELECT * FROM '.$p.'user WHERE STAFF_UUID=? AND IS_DELETE=0',[$lease['staff_uuid']]);$result['actor']=$q('SELECT * FROM '.$p.'user WHERE ID=?',[$lease['actor_id']]);$check(strlen(json_encode($result))<=2097152,'Source cap2MiB');return $result;};
$guard=static function(array $now,bool $extMutable=false)use($lease,$check):void{$b=$lease['baseline'];foreach(['staff','user','actor']as $t)$check($now[$t]===$b[$t],'Reference sentinel '.$t);foreach(['syllabus_evaluate','syllabus_evaluate_ext']as $t){$old=$b[$t];foreach($old as $r){$matches=array_values(array_filter($now[$t],static function($v)use($r){return (string)$v['id']===(string)$r['id'];}));$check(count($matches)===1,'Existing PK sentinel');$actual=$matches[0];if($extMutable&&$t==='syllabus_evaluate_ext'&&(string)$r['id']==='1'){$actual['content']=$r['content'];}$check($actual===$r,'Existing full row sentinel '.$t);}$natural=array_values(array_filter($now[$t],static function($r)use($t,$lease){return !in_array((string)$r['id'],$lease['sentinel_ids'][$t],true)&&!($t==='syllabus_evaluate'&&strpos($r['test_content'],$lease['marker'])!==false);}));$check($natural===$lease['natural'][$t],'Exact PK excluded natural source');}};
$own=static function(array $now)use($lease):array{return array_values(array_filter($now['syllabus_evaluate'],static function($r)use($lease){return strpos($r['test_content'],$lease['marker'])!==false;}));};
$info=static function(array $row)use($lane):array{$row['id']=(int)$row['id'];if($lane==='C'&&preg_match('/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\.0{1,6}$/D',$row['create_time'],$m))$row['create_time']=$m[1];return $row;};
$listing=static function(array $s)use($lease):array{$r=array_values(array_filter($s['syllabus_evaluate'],static function($r)use($lease){return $r['staff_uuid']===$lease['staff_uuid'];}));usort($r,static function($a,$b){return (int)$b['id']<=>(int)$a['id'];});$rows=array_map(static function($r){return array_intersect_key($r,array_flip(['uuid','staff_uuid','test_content','test_time','achievement','demo']));},$r);return ['code'=>0,'message'=>'获取数据成功','data'=>['rows'=>array_slice($rows,0,10),'content'=>$s['syllabus_evaluate_ext'][0]['content'],'total'=>count($r)]];};
