From 2f2d268e0f8c869a0d65f566abc3656a515874e7 Mon Sep 17 00:00:00 2001 From: Joel Male Date: Wed, 27 May 2026 21:02:23 +1000 Subject: [PATCH] feat: add CartManager --- src/CartManager.php | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/CartManager.php diff --git a/src/CartManager.php b/src/CartManager.php new file mode 100644 index 0000000..5ca36c4 --- /dev/null +++ b/src/CartManager.php @@ -0,0 +1,72 @@ +config->get('cart.driver', 'session'); + } + + private function sessionKey(): string + { + return $this->container['session']->getId(); + } + + public function createSessionDriver(): CartDriver + { + return new SessionDriver( + $this->container['session'], + $this->sessionKey(), + ); + } + + public function createDatabaseDriver(): CartDriver + { + $config = $this->config->get('cart.storage.database'); + + return new DatabaseDriver( + $config['model'], + $config['id'], + $config['items'], + $config['conditions'], + $this->sessionKey(), + ); + } + + public function createRedisDriver(): CartDriver + { + $config = $this->config->get('cart.drivers.redis', []); + + return new RedisDriver( + $this->container['redis'], + $this->sessionKey(), + $config['connection'] ?? 'default', + $config['ttl'] ?? 604800, + ); + } + + public function createNullDriver(): CartDriver + { + return new NullDriver($this->sessionKey()); + } + + public function createMultiDriver(): CartDriver + { + $names = $this->config->get('cart.drivers.multi', ['session', 'database']); + $drivers = array_map(fn(string $name) => $this->driver($name), $names); + + return new MultiDriver($drivers); + } +}