api->getRules()); * echo json_encode(RetentionModule::create($pdo, Context::system())->api->plan()); // nightly run */ class RetentionModule { public function __construct( public readonly RuleService $rules, public readonly RetentionApiController $api ) { } public static function create(PDO $pdo, Context $context): self { $rules = new RuleService(new RuleRepository($pdo), $context); return new self($rules, new RetentionApiController($rules, new ApiResponse())); } /** Legacy entry point for procedural callers: reads $pdo and $_SESSION */ public static function fromGlobals(?Context $context = null): self { return self::create($GLOBALS['pdo'], $context ?? Context::fromSession($_SESSION ?? [])); } }