From e97d976705c44f03685412ecbd01177f109d7977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20P=C5=82aczek?= Date: Wed, 14 May 2025 09:03:25 +0200 Subject: [PATCH 1/3] Implement a caching mechanism --- src/Command/CacheWarmCommand.php | 4 ++-- src/Kernel.php | 8 +++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Command/CacheWarmCommand.php b/src/Command/CacheWarmCommand.php index 450e5e2..4c8d167 100644 --- a/src/Command/CacheWarmCommand.php +++ b/src/Command/CacheWarmCommand.php @@ -42,8 +42,8 @@ class CacheWarmCommand extends Command $progress = new ProgressBar($output); $progress->start(); $products = Product::with([ - 'price' => fn($query) => $query->orderBy('created_at', 'desc'), - 'stock' => fn($query) => $query->orderBy('created_at', 'desc'), + 'price' => fn($query) => $query->orderByDesc('created_at'), + 'stock' => fn($query) => $query->orderByDesc('created_at'), ])->get(); $progress->setMaxSteps(count($products)); diff --git a/src/Kernel.php b/src/Kernel.php index 2e0f999..add1329 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -34,14 +34,12 @@ class Kernel extends BaseKernel 'secret' => 'S0ME_SECRET' ]); $services = $container->services()->defaults()->autowire()->autoconfigure(); - $services->load('Krzysiej\\RyobiCrawler\\Controller\\', __DIR__ . '/Controller/*'); - $services->load('Krzysiej\\RyobiCrawler\\Command\\', __DIR__ . '/Command/*')->tag('console.command'); + $services->load('Krzysiej\\RyobiCrawler\\', __DIR__ ) + ->exclude('../src/{Models,Twig,Kernel.php}'); $services->set('twig.extension.cache', AppExtension::class)->tag('twig.extension'); $services->set(CacheExtension::class)->tag('twig.extension'); $services->set(FilesystemAdapter::class)->args([ - '', // namespace - 0, // default lifetime - __DIR__ . '/../var/cache/twig_blocks' // custom path + '$directory' => __DIR__ . '/../var/cache/twig_blocks' ]); $services->set('twig.runtime.cache', CacheRuntime::class)->args([new Reference(FilesystemAdapter::class)])->tag('twig.runtime'); } From f30304cbe90b4ed5c46c2f5442537126d3862e3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20P=C5=82aczek?= Date: Wed, 14 May 2025 13:14:57 +0200 Subject: [PATCH 2/3] Autowire database connection. --- bin/composer | 2 +- src/Command/ScrapeWebsite.php | 12 +++++------- src/Controller/BaseController.php | 6 +----- src/DatabaseFactory.php | 17 +++++++++++++++++ src/Kernel.php | 4 +++- 5 files changed, 27 insertions(+), 14 deletions(-) create mode 100644 src/DatabaseFactory.php diff --git a/bin/composer b/bin/composer index a65407d..f7ab9e6 100755 --- a/bin/composer +++ b/bin/composer @@ -1,3 +1,3 @@ #!/usr/bin/env bash -[ -z "$1" ] && echo "Please specify a Composer command (ex. install)" && exit +[ -z "$1" ] && bin/cli composer list && exit bin/cli composer "$@" \ No newline at end of file diff --git a/src/Command/ScrapeWebsite.php b/src/Command/ScrapeWebsite.php index f6be3fe..722856a 100644 --- a/src/Command/ScrapeWebsite.php +++ b/src/Command/ScrapeWebsite.php @@ -21,15 +21,13 @@ class ScrapeWebsite extends Command { private Client $client; + public function __construct(protected Capsule $database) + { + parent::__construct(); + } + protected function configure(): void { - $capsule = new Capsule; - $capsule->addConnection([ - 'driver' => 'sqlite', - 'database' => __DIR__ . '/../../database.sqlite', - ]); - $capsule->setAsGlobal(); - $capsule->bootEloquent(); $this->client = new Client(); } diff --git a/src/Controller/BaseController.php b/src/Controller/BaseController.php index fb6f2ff..dfccd17 100644 --- a/src/Controller/BaseController.php +++ b/src/Controller/BaseController.php @@ -11,11 +11,7 @@ class BaseController extends AbstractController { protected Environment $twig; - public function __construct(protected FilesystemAdapter $cache) + public function __construct(protected FilesystemAdapter $cache, protected Capsule $database) { - $capsule = new Capsule; - $capsule->addConnection(['driver' => 'sqlite', 'database' => __DIR__ . '/../../database.sqlite']); - $capsule->setAsGlobal(); - $capsule->bootEloquent(); } } diff --git a/src/DatabaseFactory.php b/src/DatabaseFactory.php new file mode 100644 index 0000000..6c76708 --- /dev/null +++ b/src/DatabaseFactory.php @@ -0,0 +1,17 @@ +addConnection(['driver' => 'sqlite', 'database' => __DIR__ . '/../database.sqlite']); + $capsule->setAsGlobal(); + $capsule->bootEloquent(); + + return $capsule; + } +} \ No newline at end of file diff --git a/src/Kernel.php b/src/Kernel.php index add1329..a059cf5 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -2,6 +2,7 @@ namespace Krzysiej\RyobiCrawler; +use Illuminate\Database\Capsule\Manager; use Krzysiej\RyobiCrawler\Twig\AppExtension; use Symfony\Bundle\FrameworkBundle\FrameworkBundle; use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait; @@ -34,8 +35,9 @@ class Kernel extends BaseKernel 'secret' => 'S0ME_SECRET' ]); $services = $container->services()->defaults()->autowire()->autoconfigure(); + $services->set(Manager::class)->factory([DatabaseFactory::class, 'create']); $services->load('Krzysiej\\RyobiCrawler\\', __DIR__ ) - ->exclude('../src/{Models,Twig,Kernel.php}'); + ->exclude('../src/{Models,Twig,DatabaseFactory.php,Kernel.php}'); $services->set('twig.extension.cache', AppExtension::class)->tag('twig.extension'); $services->set(CacheExtension::class)->tag('twig.extension'); $services->set(FilesystemAdapter::class)->args([ From 76d8b7d9cf585a5b42f1b616e099a98d8e75e669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20P=C5=82aczek?= Date: Wed, 14 May 2025 15:15:49 +0200 Subject: [PATCH 3/3] Autowire database connection. --- src/DatabaseFactory.php | 5 +---- src/Kernel.php | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/DatabaseFactory.php b/src/DatabaseFactory.php index 6c76708..0702d80 100644 --- a/src/DatabaseFactory.php +++ b/src/DatabaseFactory.php @@ -5,13 +5,10 @@ namespace Krzysiej\RyobiCrawler; use Illuminate\Database\Capsule\Manager as Capsule; class DatabaseFactory { - public static function create(): Capsule + public static function create(Capsule $capsule): void { - $capsule = new Capsule; $capsule->addConnection(['driver' => 'sqlite', 'database' => __DIR__ . '/../database.sqlite']); $capsule->setAsGlobal(); $capsule->bootEloquent(); - - return $capsule; } } \ No newline at end of file diff --git a/src/Kernel.php b/src/Kernel.php index a059cf5..4293331 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -35,7 +35,7 @@ class Kernel extends BaseKernel 'secret' => 'S0ME_SECRET' ]); $services = $container->services()->defaults()->autowire()->autoconfigure(); - $services->set(Manager::class)->factory([DatabaseFactory::class, 'create']); + $services->set(Manager::class)->configurator([DatabaseFactory::class, 'create']); $services->load('Krzysiej\\RyobiCrawler\\', __DIR__ ) ->exclude('../src/{Models,Twig,DatabaseFactory.php,Kernel.php}'); $services->set('twig.extension.cache', AppExtension::class)->tag('twig.extension');