Bleh
[rock.divinelegy.git] / DataAccess / UserRepository.php
1 <?php
2
3 namespace DataAccess;
4
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;
12
13 //TODO: Implement some sort of caching. Probably OK for now not to worry.
14 class UserRepository implements IUserRepository
15 {
16 private $_dataMapper;
17 private $_queryBuilderFactory;
18 private $_facebookSessionFactory;
19
20 public function __construct(IDataMapper $dataMapper, IQueryBuilderFactory $queryBuilderFactory, IFacebookSessionFactory $faceBookSessionFactory) {
21 $this->_dataMapper = $dataMapper;
22 $this->_queryBuilderFactory = $queryBuilderFactory;
23 $this->_facebookSessionFactory = $faceBookSessionFactory;
24 }
25
26 public function findById($id) {
27 $queryBuilder = $this->_queryBuilderFactory->createInstance();
28 $queryBuilder->where('id', '=', "$id");
29
30 return $this->_dataMapper->map(
31 'User',
32 $queryBuilder
33 );
34 }
35
36 public function findRange($id, $limit)
37 {
38 return $this->_dataMapper->findRange(
39 'User',
40 'SELECT * FROM %s WHERE id>=' . $id . ' LIMIT ' . $limit
41 );
42 }
43
44 public function findByFacebookId($id) {
45 $queryBuilder = $this->_queryBuilderFactory->createInstance();
46 $queryBuilder->where('facebook_id', '=', "$id");
47
48 $results = $this->_dataMapper->map(
49 'User',
50 $queryBuilder
51 );
52
53 return reset($results);
54 }
55
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();
59
60 $id = $facebookRequest->getGraphObject(GraphUser::className())->getId();
61
62 return $this->findByFacebookId($id);
63 }
64
65 public function save(IUser $entity) {
66 $this->_dataMapper->save($entity);
67 }
68
69 //TODO: Implement
70 public function remove(IUser $entity) {
71 ;
72 }
73
74 }