Browse Source

Refactoring services

feature/symfony6.1
Guillaume 2 years ago
parent
commit
5e13852f33
12 changed files with 206 additions and 57 deletions
  1. +54
    -0
      Model/Site/NewsModel.php
  2. +32
    -3
      Model/User/UserModel.php
  3. +29
    -26
      Repository/AbstractRepository.php
  4. +13
    -0
      Repository/AbstractRepositoryQuery.php
  5. +17
    -0
      Repository/AbstractStore.php
  6. +0
    -6
      Repository/Site/PageRepositoryQuery.php
  7. +0
    -11
      Repository/Site/PageStore.php
  8. +26
    -0
      Repository/StatusRepositoryQueryTrait.php
  9. +2
    -2
      Repository/Ticket/TicketRepositoryQuery.php
  10. +24
    -0
      Repository/TreeRepositoryQueryTrait.php
  11. +7
    -7
      Repository/User/UserRepositoryQuery.php
  12. +2
    -2
      Repository/User/UserStore.php

+ 54
- 0
Model/Site/NewsModel.php View File

use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo; use Gedmo\Mapping\Annotation as Gedmo;
use Lc\SovBundle\Doctrine\Pattern\AbstractFullEntity; use Lc\SovBundle\Doctrine\Pattern\AbstractFullEntity;
use Lc\SovBundle\Model\File\FileInterface;
use Lc\SovBundle\Model\Newsletter\NewsletterInterface;


/** /**
* @ORM\MappedSuperclass() * @ORM\MappedSuperclass()
*/ */
protected $date; protected $date;


/**
* @ORM\Column(type="boolean", nullable=true)
*/
protected $isSent;


/**
* @ORM\ManyToOne(targetEntity="Lc\SovBundle\Newsletter\NewsletterInsterface", inversedBy="news")
*/
protected $newsletter;

/**
* @ORM\ManyToOne(targetEntity="Lc\SovBundle\File\FileInsterface", cascade={"persist", "remove"})
*/
protected $image;

public function __toString() public function __toString()
{ {
return $this->getTitle(); return $this->getTitle();


return $this; return $this;
} }

public function getIsSent(): ?bool
{
return $this->isSent;
}

public function setIsSent(?bool $isSent): self
{
$this->isSent = $isSent;

return $this;
}

public function getImage(): ?FileInterface
{
return $this->image;
}

public function setImage(?FileInterface $image): self
{
$this->image = $image;

return $this;
}

public function getNewsletter(): ?NewsletterInterface
{
return $this->newsletter;
}

public function setNewsletter(?NewsletterInterface $newsletter): self
{
$this->newsletter = $newsletter;

return $this;
}
} }

+ 32
- 3
Model/User/UserModel.php View File

use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Lc\SovBundle\Doctrine\EntityInterface; use Lc\SovBundle\Doctrine\EntityInterface;
use Lc\SovBundle\Doctrine\Extension\DevAliasInterface;
use Lc\SovBundle\Doctrine\Extension\DevAliasTrait;
use Lc\SovBundle\Model\Newsletter\NewsletterInterface; use Lc\SovBundle\Model\Newsletter\NewsletterInterface;
use Lc\SovBundle\Model\Ticket\TicketInterface; use Lc\SovBundle\Model\Ticket\TicketInterface;
use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserInterface;
/** /**
* @ORM\MappedSuperclass() * @ORM\MappedSuperclass()
*/ */
abstract class UserModel implements EntityInterface, UserInterface
abstract class UserModel implements EntityInterface, UserInterface, DevAliasInterface
{ {
use DevAliasTrait;
/** /**
* @ORM\Column(type="string", length=180, unique=true) * @ORM\Column(type="string", length=180, unique=true)
*/ */
*/ */
protected $gender; protected $gender;


/**
* @ORM\Column(type="date", nullable=true)
*/
protected $birthdate;

/** /**
* @ORM\Column(type="boolean") * @ORM\Column(type="boolean")
*/ */
return $this; return $this;
} }


public function getBirthdate(): ?\DateTimeInterface
{
return $this->birthdate;
}

public function setBirthdate(\DateTimeInterface $birthdate): self
{
$this->birthdate = $birthdate;

return $this;
}


/** /**
* @see UserInterface * @see UserInterface
*/ */
} }




//TODO vérifier si on peut déplacer da Solver
public function generatePassword($length = 8): string public function generatePassword($length = 8): string
{ {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
return $this; return $this;
} }


public function getName(): ?string
public function getPhone(): ?string
{
return $this->phone;
}

public function setPhone(?string $phone): self
{ {
return $this->getFirstname().' '.strtoupper($this->getLastname());
$this->phone = $phone;

return $this;
} }


public function isVerified(): bool public function isVerified(): bool

+ 29
- 26
Repository/AbstractRepository.php View File

$this->defaultLocale = $locale; $this->defaultLocale = $locale;
} }


public function findOneByOldUrl($url)
{
$qb = $this->createQueryBuilder('entity')
->where('entity.oldUrls LIKE :oldUrl')
->andWhere('entity.status = 1')
->setParameter(':oldUrl', '%' . $url . '%');

return $qb->getQuery()->getOneOrNullResult();
}

public function getOneOrNullResult(QueryBuilder $qb, $locale = null, $hydrationMode = null) public function getOneOrNullResult(QueryBuilder $qb, $locale = null, $hydrationMode = null)
{ {
return $this->getTranslatedQuery($qb, $locale)->getOneOrNullResult($hydrationMode); return $this->getTranslatedQuery($qb, $locale)->getOneOrNullResult($hydrationMode);
return $query; return $query;
} }


public function findBySimilarSlug($slug)
{
$qb = $this->createQueryBuilder('entity')
->select('COUNT(entity.slug) as totalSimilar')
->andWhere('entity.status>=0')
->andWhere('entity.slug LIKE :slug')
->setParameter('slug', $slug)
->groupBy('entity.slug')
->having('COUNT(entity.slug) >=1');

return $qb->getQuery()->getOneOrNullResult();
}

public function findAll()
// @TODO : à vérifier si on peut les virer
/*public function findAll()
{ {
return $this->findBy(array()); return $this->findBy(array());
} }


protected function setCriteria(array $criteria): array protected function setCriteria(array $criteria): array
{ {
/*$className = $this->getClassMetadata()->getName();
$className = $this->getClassMetadata()->getName();
$entity = new $className; $entity = new $className;


if ($entity instanceof StatusInterface) { if ($entity instanceof StatusInterface) {
if ($criteria['status'] === false) { if ($criteria['status'] === false) {
unset($criteria['status']); unset($criteria['status']);
} }
}*/
}


return $criteria; return $criteria;
}*/

// @TODO : à réécrire dans un Store
/*
public function findBySimilarSlug($slug)
{
$qb = $this->createQueryBuilder('entity')
->select('COUNT(entity.slug) as totalSimilar')
->andWhere('entity.status>=0')
->andWhere('entity.slug LIKE :slug')
->setParameter('slug', $slug)
->groupBy('entity.slug')
->having('COUNT(entity.slug) >=1');

return $qb->getQuery()->getOneOrNullResult();
} }


public function findOneByOldUrl($url)
{
$qb = $this->createQueryBuilder('entity')
->where('entity.oldUrls LIKE :oldUrl')
->andWhere('entity.status = 1')
->setParameter(':oldUrl', '%' . $url . '%');

return $qb->getQuery()->getOneOrNullResult();
}*/

} }

+ 13
- 0
Repository/AbstractRepositoryQuery.php View File



abstract class AbstractRepositoryQuery abstract class AbstractRepositoryQuery
{ {
use StatusRepositoryQueryTrait;
use TreeRepositoryQueryTrait;

protected ServiceEntityRepository $repository; protected ServiceEntityRepository $repository;
protected QueryBuilder $query; protected QueryBuilder $query;
protected PaginatorInterface $paginator; protected PaginatorInterface $paginator;
->andWhere('.devAlias = :devAlias') ->andWhere('.devAlias = :devAlias')
->setParameter('devAlias', $devAlias); ->setParameter('devAlias', $devAlias);
} }

public function filterBySlug(string $slug)
{
return $this
->andWhere('.slug = :slug')
->setParameter('slug', $slug);
}



} }



+ 17
- 0
Repository/AbstractStore.php View File



namespace Lc\SovBundle\Repository; namespace Lc\SovBundle\Repository;


use Lc\SovBundle\Model\Site\PageInterface;

abstract class AbstractStore abstract class AbstractStore
{ {
public function createQuery()
{
return $this->query->create();
}

public function getRepositoryQuery() public function getRepositoryQuery()
{ {
return $this->query; return $this->query;


return $query->findOne(); return $query->findOne();
} }

//findPageBySlug
public function getOneBySlug(string $slug): ?PageInterface
{
$query = $this->query->create();
$query->filterBySlug($slug);

return $query->findOne();
}

} }

+ 0
- 6
Repository/Site/PageRepositoryQuery.php View File

parent::__construct($repository, 'r', $paginator); parent::__construct($repository, 'r', $paginator);
} }


public function filterBySlug(string $slug)
{
return $this
->andWhere('.slug = :slug')
->setParameter('slug', $slug);
}
} }

+ 0
- 11
Repository/Site/PageStore.php View File

{ {
$this->query = $query; $this->query = $query;
} }

//findPageBySlug
public function getBySlug(string $slug): ?PageInterface
{
$query = $this->query->create();

$query
->filterBySlug($slug);

return $query->findOne();
}
} }

+ 26
- 0
Repository/StatusRepositoryQueryTrait.php View File

<?php

namespace Lc\SovBundle\Repository;

trait StatusRepositoryQueryTrait
{
public function filterByStatus(int $status):self
{
return $this->andWhere('.status = :status')->setParameter(':status', $status);
}

public function filterIsOffline():self
{
return $this->andWhere('.status = :status')->setParameter(':status', 0);
}

public function filterIsOnline():self
{
return $this->andWhere('.status = :status')->setParameter(':status', 1);
}

public function filterIsOnlineAndOffline():self
{
return $this->andWhere('.status >= 0');
}
}

+ 2
- 2
Repository/Ticket/TicketRepositoryQuery.php View File

public function filterByStatus($statusArray): self public function filterByStatus($statusArray): self
{ {
return $this return $this
->andWhere('.status IN (:status)')
->setParameter('status', $statusArray);
->andWhere('.status IN (:status)')
->setParameter('status', $statusArray);
} }


public function selectCount(): self public function selectCount(): self

+ 24
- 0
Repository/TreeRepositoryQueryTrait.php View File

<?php

namespace Lc\SovBundle\Repository;

use Lc\SovBundle\Doctrine\EntityInterface;

trait TreeRepositoryQueryTrait
{
public function filterIsParent()
{
return $this->andWhere('.parent is NULL');
}

public function filterIsChildren()
{
return $this->andWhere('.parent is NOT NULL');
}

public function filterByParent(EntityInterface $parent)
{
return $this->andWhere('.parent = :parent')->setParameter('parent', $parent);
}

}

+ 7
- 7
Repository/User/UserRepositoryQuery.php View File

public function filterByNewsletter(Newsletter $newsletter): self public function filterByNewsletter(Newsletter $newsletter): self
{ {
return $this return $this
->andWhere(':newsletter MEMBER OF .newsletters')
->setParameter('newsletter', $newsletter->getId());
->andWhere(':newsletter MEMBER OF .newsletters')
->setParameter('newsletter', $newsletter->getId());
} }


public function filterByRole(string $role): self public function filterByRole(string $role): self
{ {
return $this return $this
->andWhere('.roles LIKE :roles')
->setParameter('roles', '%"' . $role . '"%');
->andWhere('.roles LIKE :roles')
->setParameter('roles', '%"' . $role . '"%');
} }


public function filterByTicketTypeNotification(string $ticketType): self public function filterByTicketTypeNotification(string $ticketType): self
{ {
return $this return $this
->andWhere('.ticketTypesNotification LIKE :ticketType')
->setParameter('ticketType', '%"' . $ticketType . '"%');
->andWhere('.ticketTypesNotification LIKE :ticketType')
->setParameter('ticketType', '%"' . $ticketType . '"%');
} }


public function filterByEmail(string $email): self public function filterByEmail(string $email): self
->setParameter('email', $email); ->setParameter('email', $email);
} }


}
}

+ 2
- 2
Repository/User/UserStore.php View File

$this->query = $query; $this->query = $query;
} }


//findAllByNewsletter
//findAllByNewsletter
public function getByNewsletter(Newsletter $newsletter, $query = null): array public function getByNewsletter(Newsletter $newsletter, $query = null): array
{ {
if (is_null($query)) { if (is_null($query)) {
return $query->find(); return $query->find();
} }


//findByRole
//findByRole
public function getByRole(string $role): array public function getByRole(string $role): array
{ {
$query = $this->query->create(); $query = $this->query->create();

Loading…
Cancel
Save