544611ee019a59f810e97a66c39c35a4a0781494
[rock.divinelegy.git] / DataAccess / DownloadRepository.php
1 <?php
2
3 namespace DataAccess;
4
5 use DataAccess\IDownloadRepository;
6 use DataAccess\DataMapper\IDataMapper;
7 use DataAccess\Queries\IQueryBuilderFactory;
8 use DataAccess\Queries\IQueryBuilder;
9 use DataAccess\Queries\IDownloadQueryConstraints;
10 use Domain\Entities\IDownload;
11
12 //TODO: Implement some sort of caching. Probably OK for now not to worry.
13 class DownloadRepository implements IDownloadRepository
14 {
15 private $_dataMapper;
16 private $_queryBuilderFactory;
17
18 public function __construct(IDataMapper $dataMapper, IQueryBuilderFactory $queryBuilderFactory) {
19 $this->_dataMapper = $dataMapper;
20 $this->_queryBuilderFactory = $queryBuilderFactory;
21 }
22
23 public function findById($id) {
24 $queryBuilder = $this->_queryBuilderFactory->createInstance();
25 $queryBuilder->where('id', '=', $id);
26
27 $result = $this->_dataMapper->map('Download', $queryBuilder);
28 return reset($result);
29 }
30
31 public function findAll()
32 {
33 $queryBuilder = $this->_queryBuilderFactory->createInstance();
34 $queryBuilder->where('id', '>', 0);
35 $result = $this->_dataMapper->map('Download', $queryBuilder);
36 return $result;
37 }
38
39 public function findRange($id, $limit)
40 {
41 $queryBuilder = $this->_queryBuilderFactory->createInstance();
42 $queryBuilder->where('id', '>=', $id)->limit($limit);
43
44 return $this->_dataMapper->map('Download', $queryBuilder);
45 }
46
47 public function save(IDownload $entity) {
48 return $this->_dataMapper->save($entity);
49 }
50
51 public function findByUserId($id, IDownloadQueryConstraints $constraints = null)
52 {
53 $queryBuilder = $this->_queryBuilderFactory->createInstance();
54 $queryBuilder->where('user_id', '=', $id);
55
56 return $this->applyConstraintsAndReturn($constraints, $queryBuilder);
57 }
58
59 public function findByFileId($id, IDownloadQueryConstraints $constraints = null)
60 {
61 $queryBuilder = $this->_queryBuilderFactory->createInstance();
62 $queryBuilder->where('file_id', '=', $id);
63
64 return $this->applyConstraintsAndReturn($constraints, $queryBuilder);
65 }
66
67 private function applyConstraintsAndReturn(IDownloadQueryConstraints $constraints = NULL, IQueryBuilder $queryBuilder)
68 {
69 if($constraints)
70 {
71 $constraints->applyTo($queryBuilder);
72 }
73
74 return $this->_dataMapper->map('Download', $queryBuilder);
75 }
76 }