5 use DataAccess\IUserRepository
;
6 use DataAccess\DataMapper\IDataMapper
;
7 use Domain\Entities\IUser
;
8 use DataAccess\Queries\IQueryBuilderFactory
;
9 use Services\IFacebookSessionFactory
;
10 use Facebook\FacebookRequest
;
11 use Facebook\GraphUser
;
13 //TODO: Implement some sort of caching. Probably OK for now not to worry.
14 class UserRepository
implements IUserRepository
17 private $_queryBuilderFactory;
18 private $_facebookSessionFactory;
20 public function __construct(IDataMapper
$dataMapper, IQueryBuilderFactory
$queryBuilderFactory, IFacebookSessionFactory
$faceBookSessionFactory) {
21 $this->_dataMapper
= $dataMapper;
22 $this->_queryBuilderFactory
= $queryBuilderFactory;
23 $this->_facebookSessionFactory
= $faceBookSessionFactory;
26 public function findById($id) {
27 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
28 $queryBuilder->where('id', '=', "$id");
30 return $this->_dataMapper
->map(
36 public function findRange($id, $limit)
38 return $this->_dataMapper
->findRange(
40 'SELECT * FROM %s WHERE id>=' . $id . ' LIMIT ' . $limit
44 public function findByFacebookId($id) {
45 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
46 $queryBuilder->where('facebook_id', '=', "$id");
48 $results = $this->_dataMapper
->map(
53 return reset($results);
56 public function findByAuthToken($token) {
57 $facebookSession = $this->_facebookSessionFactory
->createInstance($token);
58 $facebookRequest = (new FacebookRequest($facebookSession, 'GET', '/me?fields=hometown,first_name,last_name'))->execute();
60 $id = $facebookRequest->getGraphObject(GraphUser
::className())->getId();
62 return $this->findByFacebookId($id);
65 public function save(IUser
$entity) {
66 $this->_dataMapper
->save($entity);
70 public function remove(IUser
$entity) {