Skip to content

Commit 497f3f4

Browse files
committed
729-panel-performance
1 parent 3220a8c commit 497f3f4

6 files changed

Lines changed: 154 additions & 21 deletions

File tree

config/module.config.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
use ProspectOne\UserModule\Mapper\Factory\UserMapperFactory;
1010
use ProspectOne\UserModule\Mapper\UserMapper;
1111
use ProspectOne\UserModule\Model\DisabledSessionManager;
12+
use ProspectOne\UserModule\Model\Factory\UserModelFactory;
13+
use ProspectOne\UserModule\Model\UserModel;
1214
use ProspectOne\UserModule\Service\AuthAdapterService;
1315
use ProspectOne\UserModule\Service\Factory\AuthAdapterServiceFactory;
1416
use ProspectOne\UserModule\Service\Factory\CurrentUserFactory;
@@ -124,6 +126,7 @@
124126
UserMapper::class => UserMapperFactory::class,
125127
'ProspectOne\UserModule\UserHydrator' => HydratorFactory::class,
126128
DisabledSessionManager::class => InvokableFactory::class,
129+
UserModel::class => UserModelFactory::class,
127130
],
128131
'aliases' => [
129132
AuthAdapterService::class => "ProspectOne\UserModule\Service\AuthAdapter",

src/Mapper/UserMapper.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
namespace ProspectOne\UserModule\Mapper;
33

44
use Doctrine\ORM\EntityRepository;
5+
use ProspectOne\UserModule\Entity\User;
56
use Zend\Hydrator\AbstractHydrator;
67

78
/**
@@ -56,4 +57,15 @@ public function fetchAll()
5657
$result = array_map([$this->hydrator, "extract"], $entities);
5758
return $result;
5859
}
60+
61+
/**
62+
* @param $email
63+
* @return User
64+
* @throws \Doctrine\ORM\ORMException
65+
*/
66+
public function findByEmail($email)
67+
{
68+
$entity = $this->getRepository()->findOneByEmail($email);
69+
return $entity;
70+
}
5971
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
namespace ProspectOne\UserModule\Model\Factory;
3+
4+
use Interop\Container\ContainerInterface;
5+
use Interop\Container\Exception\ContainerException;
6+
use ProspectOne\UserModule\Mapper\UserMapper;
7+
use ProspectOne\UserModule\Model\UserModel;
8+
use Zend\ServiceManager\Exception\ServiceNotCreatedException;
9+
use Zend\ServiceManager\Exception\ServiceNotFoundException;
10+
use Zend\ServiceManager\Factory\FactoryInterface;
11+
12+
/**
13+
* Class UserModelFactory
14+
* @package ProspectOne\UserModule\Model\Factory
15+
*/
16+
class UserModelFactory implements FactoryInterface
17+
{
18+
19+
/**
20+
* Create an object
21+
*
22+
* @param ContainerInterface $container
23+
* @param string $requestedName
24+
* @param null|array $options
25+
* @return UserModel
26+
* @throws ServiceNotFoundException if unable to resolve the service.
27+
* @throws ServiceNotCreatedException if an exception is raised when
28+
* creating a service.
29+
* @throws ContainerException if any other error occurs
30+
*/
31+
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
32+
{
33+
$userMapper = $container->get(UserMapper::class);
34+
$userModel = new UserModel($userMapper);
35+
return $userModel;
36+
}
37+
}

src/Model/UserModel.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace ProspectOne\UserModule\Model;
4+
5+
use ProspectOne\UserModule\Entity\User;
6+
use ProspectOne\UserModule\Mapper\UserMapper;
7+
8+
/**
9+
* Class UserModel
10+
* @package ProspectOne\UserModule\Model
11+
*/
12+
class UserModel
13+
{
14+
/**
15+
* @var UserMapper
16+
*/
17+
private $userMapper;
18+
19+
/**
20+
* UserModel constructor.
21+
* @param UserMapper $userMapper
22+
*/
23+
public function __construct(UserMapper $userMapper)
24+
{
25+
$this->userMapper = $userMapper;
26+
}
27+
28+
/**
29+
* @return UserMapper
30+
*/
31+
public function getUserMapper(): UserMapper
32+
{
33+
return $this->userMapper;
34+
}
35+
36+
/**
37+
* @param UserMapper $userMapper
38+
*/
39+
public function setUserMapper(UserMapper $userMapper): void
40+
{
41+
$this->userMapper = $userMapper;
42+
}
43+
44+
45+
46+
/**
47+
* @param $email
48+
* @return User
49+
* @throws \Doctrine\ORM\ORMException
50+
*/
51+
public function getUserByEmail($email)
52+
{
53+
static $users;
54+
if (!empty($users[$email])) {
55+
return $users[$email];
56+
}
57+
$entity = $this->getUserMapper()->findByEmail($email);
58+
$users[$email] = $entity;
59+
return $entity;
60+
}
61+
}

src/Service/AuthAdapterService.php

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use ProspectOne\UserModule\Entity\User;
55
use ProspectOne\UserModule\Exception\LogicException;
66
use ProspectOne\UserModule\Interfaces\UserInterface;
7+
use ProspectOne\UserModule\Model\UserModel;
78
use Zend\Authentication\Adapter\AdapterInterface;
89
use Zend\Authentication\Result;
910
use Zend\Crypt\Password\Bcrypt;
@@ -60,6 +61,11 @@ class AuthAdapterService implements AdapterInterface
6061
*/
6162
protected $currentUser;
6263

64+
/**
65+
* @var UserModel
66+
*/
67+
private $userModel;
68+
6369
/**
6470
* @return UserInterface
6571
*/
@@ -122,6 +128,14 @@ protected function setAuthHeader(string $authHeader): AuthAdapterService
122128
return $this;
123129
}
124130

131+
/**
132+
* @return UserModel
133+
*/
134+
private function getUserModel(): UserModel
135+
{
136+
return $this->userModel;
137+
}
138+
125139
/**
126140
* AuthAdapterService constructor.
127141
* @param $entityManager
@@ -130,15 +144,18 @@ protected function setAuthHeader(string $authHeader): AuthAdapterService
130144
* @param string $headerValue
131145
* @param string $email
132146
* @param string $userEntityClassName
147+
* @param UserModel $userModel
133148
*/
134-
public function __construct($entityManager, Bcrypt $bcrypt, bool $headerAuthEnabled, ?string $headerValue = "", ?string $email = "", $userEntityClassName)
149+
public function __construct($entityManager, Bcrypt $bcrypt, bool $headerAuthEnabled, ?string $headerValue = "", ?string $email = "",
150+
$userEntityClassName, UserModel $userModel)
135151
{
136152
$this->entityManager = $entityManager;
137153
$this->bcrypt = $bcrypt;
138154
$this->headerAuthEnabled = $headerAuthEnabled;
139155
$this->authHeader = $headerValue;
140156
$this->email = $email;
141157
$this->userEntityClassName = $userEntityClassName;
158+
$this->userModel = $userModel;
142159
}
143160

144161
/**
@@ -188,8 +205,7 @@ public function setPassword($password)
188205
*/
189206
public function authenticate()
190207
{
191-
/** @var UserInterface $user */
192-
$user = $this->getUserByEmail($this->email);
208+
$user = $this->getUserModel()->getUserByEmail($this->getEmail());
193209
return $this->validateUser($user);
194210
}
195211

@@ -300,8 +316,8 @@ public function getUserByEmail(string $email)
300316
public function getCurrentUserEntity()
301317
{
302318
if(empty($this->getCurrentUser()) && !empty($this->getEmail())) {
303-
$user = $this->getUserByEmail($this->getEmail());
304-
if($user) {
319+
$user = $this->getUserModel()->getUserByEmail($this->getEmail());
320+
if(!empty($user)) {
305321
$this->setCurrentUser($user);
306322
}
307323
}

src/Service/UserManager.php

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
use ProspectOne\UserModule\Entity\Role;
55
use ProspectOne\UserModule\Interfaces\UserInterface;
6+
use ProspectOne\UserModule\Model\UserModel;
67
use Zend\Crypt\Password\Bcrypt;
78
use Zend\Math\Rand;
89
use Doctrine\ORM\EntityManager;
@@ -35,6 +36,11 @@ class UserManager
3536
*/
3637
private $bcrypt;
3738

39+
/**
40+
* @var UserModel
41+
*/
42+
private $userModel;
43+
3844
/**
3945
* @return EntityManager
4046
*/
@@ -51,17 +57,27 @@ public function getBcrypt(): Bcrypt
5157
return $this->bcrypt;
5258
}
5359

60+
/**
61+
* @return UserModel
62+
*/
63+
public function getUserModel(): UserModel
64+
{
65+
return $this->userModel;
66+
}
67+
5468
/**
5569
* UserManager constructor.
5670
* @param EntityManager $entityManager
5771
* @param Bcrypt $bcrypt
5872
* @param string $userEntityClassName
73+
* @param UserModel $userModel
5974
*/
60-
public function __construct(EntityManager $entityManager, Bcrypt $bcrypt, $userEntityClassName)
75+
public function __construct(EntityManager $entityManager, Bcrypt $bcrypt, $userEntityClassName, UserModel $userModel)
6176
{
6277
$this->entityManager = $entityManager;
6378
$this->bcrypt = $bcrypt;
6479
$this->userEntityClassName = $userEntityClassName;
80+
$this->userModel = $userModel;
6581
}
6682

6783
/**
@@ -174,9 +190,7 @@ public function createAdminUserIfNotExists()
174190
*/
175191
public function hasRole($email, $roles)
176192
{
177-
/** @var UserInterface $user */
178-
$user = $this->getUserByEmail($email);
179-
193+
$user = $this->getUserModel()->getUserByEmail($email);
180194
return in_array($user->getRoleName(),$roles, true);
181195
}
182196

@@ -187,7 +201,8 @@ public function hasRole($email, $roles)
187201
*/
188202
public function checkUserExists(string $email)
189203
{
190-
return !empty($this->getUserByEmail($email));
204+
$user = $this->getUserModel()->getUserByEmail($email);
205+
return !empty($user);
191206
}
192207

193208
/**
@@ -280,17 +295,6 @@ public function getUserByPasswordResetToken(string $passwordResetToken)
280295
->findOneByPasswordResetToken($passwordResetToken);
281296
}
282297

283-
/**
284-
* Find user by Email
285-
* @param string $email
286-
* @return mixed
287-
*/
288-
public function getUserByEmail(string $email)
289-
{
290-
return $this->entityManager->getRepository($this->userEntityClassName)
291-
->findOneByEmail($email);
292-
}
293-
294298
/**
295299
* This method sets new password by password reset token.
296300
* @param string $passwordResetToken

0 commit comments

Comments
 (0)