{
  "review_type": "source_only_no_DB_HTTP_Auth",
  "files": {
    "application/p/controller/Food.php": "d8180d6e96cda1c6b1381bae65669f9ec6142eca9803235406906cf4e701683b",
    "application/p/logic/Food.php": "cca46e5480723aa71e338c7ffc607cd49875f7180fc8d20145a338810c36ee1d",
    "application/validate/Food.php": "ef8e7b17afce58ef4f3849c278559e972bb432c1db641000e13805a8d9752f37",
    "application/model/Food.php": "068aabef6b5172cfcab35c406cb1a5eeb0938be75f3bd82b699538def203017c",
    "application/model/BaseModel.php": "439740d6cf118e4541dfa719e120afd95979c497e7639f43d8efe01e6a5d3596",
    "application/common/service/tchef/FoodHook.php": "6132f9983d41bb9e930524f9753f64b0fe8913502516b22a2477587d6a317619",
    "application/common/service/tchef/Config.php": "d47488bb909d4cd8827dd8faa243637022335fe8daaee56faa8223a4eaae0084",
    "application/common/service/tchef/Repository.php": "71d69d248d7041318e3a341b11fe7e29ae4f13db708495886aefee29c67b8d72",
    "application/common/service/DecimalResponseFormatter.php": "1561f9233360077ea0c140cf8505397e648043c65396a1c9ce9e7425357b0c3d",
    "application/common/AIApi.php": "ac31ea988dd13574cf51657ec0b8a1ec6c958509d6be26765a2a909ff47b466e",
    "application/common/MainErrorMsg.php": "1f017bb46f2340057c94305014b173d0b6ed654267accae6ceceb0f929e8a7f5",
    "application/common/model/dishes/FoodsCate.php": "570c61e9b7bb67a084b1cd15b370976921d698663b04aefa66579e4d93c6119d"
  },
  "framework_vendor": {
    "vendor/overtrue/pinyin/src/Pinyin.php": "56622be1c030d1aa003d72dac6def3f348421f016b029d5f4b30c32ab2fea0c5",
    "thinkphp/library/think/db/Query.php": "0b06cc15b08a98870e6e8df9628e78392a4d1a35cdb1acbaa04b9e77690e0758"
  },
  "source_findings": [
    "No source category counter or category parent mutation in Food main add/update/delete",
    "Valid enabled tchef config causes enqueue transaction with task and task_item INSERTs; must fail closed before this batch writes",
    "AI switch1 invokes original AIApi http_post and may UPDATE ai_foods_id if returned ID is nonempty",
    "Controller overwrites create_by/create_time on valid update; requires explicit reclassify to avoid literal null fallback",
    "Original numeric fields including DECIMAL use PDO PARAM_INT, input PHP string vs double/integer must remain original",
    "Official v1.1.0 food update_time declares ON UPDATE CURRENT_TIMESTAMP; current metadata and behavior not yet queried",
    "readById gets full raw row then 37 decimal formatter fields and three category names; lists uses exact14 projection",
    "After physical delete raw find empty type must be preserved, not forced to array"
  ]
}
