feat: multiple hotelcodes assignable to users

This commit is contained in:
Björn Fromme committed 2025-01-08 10:07:19 +01:00
1 parent 5a07d95837
commit c15188c43c
16 files changed
+256 -67

No files matched your search

+28 -25
View File
@@ -32,16 +32,14 @@ class UserRepository extends ServiceEntityRepository
$qb = $this->createQueryBuilder('u');
return $qb
->where($qb->expr()->orX(
$qb->expr()->like('u.roles', ':role_admin'),
$qb->expr()->like('u.roles', ':role_manager'),
$qb->expr()->like('u.roles', ':role_house_manager')
))
->where("JSON_CONTAINS(u.roles, :role_admin) = 1")
->orWhere("JSON_CONTAINS(u.roles, :role_manager) = 1")
->orWhere("JSON_CONTAINS(u.roles, :role_house_manager) = 1")
->orderBy('u.lastName', 'ASC')
->setParameters([
'role_admin' => '%"ROLE_ADMIN"%',
'role_manager' => '%"ROLE_MANAGER"%',
'role_house_manager' => '%"ROLE_HOUSE_MANAGER"%',
'role_admin' => json_encode('ROLE_ADMIN'),
'role_manager' => json_encode('ROLE_MANAGER'),
'role_house_manager' => json_encode('ROLE_HOUSE_MANAGER'),
])
->getQuery()
->getResult()
@@ -50,22 +48,29 @@ class UserRepository extends ServiceEntityRepository
/**
* @param string $role
* @param string $hotelCode
* @param string[]|string $hotelCode
* @return User[]
*/
public function getUsersByRoleAndHotelCode(string $role, string $hotelCode): array
public function getUsersByRoleAndHotelCode(string $role, mixed $hotelCode): array
{
$hotelCodeBase = substr($hotelCode, 0, 3);
$hotelCodes = (array) $hotelCode;
$hotelCodesBase = array_map(function ($code) {
return substr($code, 0, 3);
}, $hotelCodes);
$qb = $this->createQueryBuilder('user');
foreach ($hotelCodesBase as $index => $code) {
$qb
->orWhere('JSON_CONTAINS(user.hotelCodes, :hotelCode_'.$index.') = 1')
->setParameter('hotelCode_'.$index, json_encode($code))
;
}
return $qb
->where($qb->expr()->andX(
$qb->expr()->eq('user.hotelCode', ':hotelCode'),
$qb->expr()->like('user.roles', ':role')
))
->setParameter('hotelCode', $hotelCodeBase)
->setParameter('role', '%"'.$role.'"%')
->andWhere('JSON_CONTAINS(user.roles, :role) = 1')
->setParameter('role', json_encode($role))
->getQuery()
->getResult()
;
@@ -76,17 +81,15 @@ class UserRepository extends ServiceEntityRepository
$qb = $this->createQueryBuilder('user');
$users = $qb
->where($qb->expr()->andX(
$qb->expr()->orX(
$qb->expr()->like('user.lastName', ':search'),
$qb->expr()->like('user.firstName', ':search'),
)),
$qb->expr()->like('user.roles', ':role')
)
->where($qb->expr()->orX(
$qb->expr()->like('user.lastName', ':search'),
$qb->expr()->like('user.firstName', ':search'),
))
->andWhere('JSON_CONTAINS(user.roles, :role) = 1')
->orderBy('user.lastName', 'ASC')
->addOrderBy('user.firstName', 'ASC')
->setParameter('search', '%'.$this->escapeLikeWildcards($search).'%')
->setParameter('role', '%"'.$this->escapeLikeWildcards($role).'"%')
->setParameter('role', json_encode($role))
->getQuery()
->getResult()
;