Compare commits
2 Commits
feature/or
...
512de51d08
| Author | SHA1 | Date | |
|---|---|---|---|
| 512de51d08 | |||
|
|
e6e8f2fc15 |
@@ -2,9 +2,7 @@
|
||||
|
||||
namespace Krzysiej\RyobiCrawler\Controller;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Twig\Environment;
|
||||
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||
|
||||
@@ -19,19 +17,4 @@ class BaseController extends AbstractController
|
||||
$capsule->setAsGlobal();
|
||||
$capsule->bootEloquent();
|
||||
}
|
||||
|
||||
protected function handleOrderProducts(Builder $builder, Request $request): Builder
|
||||
{
|
||||
$builder->orderByDesc('starred')->orderByDesc('created_by');
|
||||
if ($request->query->get('order')) {
|
||||
$orderField = $request->query->get('order');
|
||||
$direction = 'desc';
|
||||
if (str_starts_with($orderField, '-')) {
|
||||
$direction = 'asc';
|
||||
}
|
||||
$builder->orderBy($request->query->get('order'), $direction);
|
||||
}
|
||||
|
||||
return $builder;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,17 +3,18 @@
|
||||
namespace Krzysiej\RyobiCrawler\Controller;
|
||||
|
||||
use Krzysiej\RyobiCrawler\Models\Product;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
|
||||
final class IndexController extends BaseController
|
||||
{
|
||||
#[Route('/', name: 'app_home')]
|
||||
public function __invoke(Request $request): Response
|
||||
public function __invoke(): Response
|
||||
{
|
||||
$products = Product::with(['currentStock', 'price', 'currentPrice']);
|
||||
$products = $this->handleOrderProducts($products, $request)->get();
|
||||
$products = Product::with(['currentStock', 'price'])
|
||||
->orderByDesc('starred')
|
||||
->orderByDesc('created_by')
|
||||
->get();
|
||||
return $this->render('productList.html.twig', ['products' => $products]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ final class NewController extends BaseController
|
||||
{
|
||||
$products = Product::where('created_at', '>', now()->modify('-30 days')->format('Y-m-d'))
|
||||
->orderByDesc('starred')
|
||||
->orderByDesc('name')
|
||||
->orderByDesc('created_by')
|
||||
->with(['currentPrice'])
|
||||
->get();
|
||||
|
||||
@@ -19,6 +19,7 @@ class AppExtension extends AbstractExtension
|
||||
{
|
||||
return [
|
||||
new TwigFunction('promosCount', [$this, 'promosCount']),
|
||||
new TwigFunction('allCount', [$this, 'allCount']),
|
||||
new TwigFunction('newCount', [$this, 'newCount']),
|
||||
new TwigFunction('discontinuedCount', [$this, 'discontinuedCount']),
|
||||
];
|
||||
@@ -30,10 +31,14 @@ class AppExtension extends AbstractExtension
|
||||
new TwigFilter('findByCreatedAtDate', [$this, 'findByCreatedAtDate']),
|
||||
];
|
||||
}
|
||||
public function allCount(): int
|
||||
{
|
||||
return Product::count();
|
||||
}
|
||||
|
||||
public function promosCount(): int
|
||||
{
|
||||
return Product::whereHas('currentPrice', fn(Builder $query) => $query->whereColumn('price', '<', 'productStandardPrice'))->with(['currentPrice'])->count();
|
||||
return Product::whereHas('currentPrice', fn(Builder $query) => $query->whereColumn('price', '<', 'productStandardPrice'))->count();
|
||||
}
|
||||
|
||||
public function newCount(): int
|
||||
|
||||
@@ -2,16 +2,15 @@
|
||||
|
||||
{% block content %}
|
||||
<div class="table-responsive">
|
||||
{{ app.request.get('order') }}
|
||||
<table class='table table-hover'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th><a href="{{ path( app.request.get('_route') , {'order': app.request.get('order') is same as('-name')?'name':'-name'|default('-name')}) }}">Name</a></th>
|
||||
<th>Name</th>
|
||||
<th>Categories</th>
|
||||
<th></th>
|
||||
<th><a href="{{ path( app.request.get('_route') , {'order': app.request.get('order') is same as('-price')?'price':'-price'|default('-price')}) }}">Price</a></th>
|
||||
<th>Price</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -18,6 +18,9 @@
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if app.request.pathinfo == path('app_home') %}active shadow-sm bg-body rounded{% endif %}" aria-current="page" href="{{ path('app_home') }}">All products <span class="badge text-bg-secondary">{{ allCount() }}</span></a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if app.request.pathinfo == path('app_promos') %}active shadow-sm bg-body rounded{% endif %}" aria-current="page" href="{{ path('app_promos') }}">Promos <span class="badge text-bg-secondary">{{ promosCount() }}</span></a>
|
||||
</li>
|
||||
|
||||
Reference in New Issue
Block a user