chore: initial import for test contour

This commit is contained in:
sova-bootstrap
2026-05-27 19:36:32 +03:00
commit 166cdb148e
282 changed files with 84872 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
<?php
namespace App\Repository;
use App\Dto\Content\ContentFilterDto;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\QueryBuilder;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<Article>
*/
class ArticleRepository extends ServiceEntityRepository
{
use ContentFilterTrait;
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
/**
*/
public function createFilteredQueryBuilder(ContentFilterDto $filters): QueryBuilder
{
$qb = $this->createQueryBuilder('a')->orderBy('a.id', 'DESC');
$this->applyCommonFilters($qb, 'a', $filters);
return $qb;
}
/**
* Поиск статьи по alias с учётом возможных вариантов написания (исторический функционал).
*/
public function findOneByAlias(string $alias): ?Article
{
$alias = trim($alias);
if ($alias === '') {
return null;
}
$variants = [
$alias,
$alias . '-',
'/' . ltrim($alias, '/'),
];
foreach ($variants as $v) {
$article = $this->findOneBy(['alias' => $v]);
if ($article !== null) {
return $article;
}
}
// Фолбэк по TRIM(alias) в БД для совместимости со старыми данными.
$conn = $this->getEntityManager()->getConnection();
$id = $conn->fetchOne(
'SELECT id FROM article WHERE TRIM(alias) = :alias LIMIT 1',
['alias' => $alias],
['alias' => \PDO::PARAM_STR],
);
if ($id !== false) {
return $this->find($id);
}
return null;
}
}