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
;
12 //TODO: Implement some sort of caching. Probably OK for now not to worry.
13 class DownloadRepository
implements IDownloadRepository
16 private $_queryBuilderFactory;
18 public function __construct(IDataMapper
$dataMapper, IQueryBuilderFactory
$queryBuilderFactory) {
19 $this->_dataMapper
= $dataMapper;
20 $this->_queryBuilderFactory
= $queryBuilderFactory;
23 public function findById($id) {
24 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
25 $queryBuilder->where('id', '=', $id);
27 $result = $this->_dataMapper
->map('Download', $queryBuilder);
28 return reset($result);
31 public function findAll()
33 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
34 $queryBuilder->where('id', '>', 0);
35 $result = $this->_dataMapper
->map('Download', $queryBuilder);
39 public function findRange($id, $limit)
41 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
42 $queryBuilder->where('id', '>=', $id)->limit($limit);
44 return $this->_dataMapper
->map('Download', $queryBuilder);
47 public function save(IDownload
$entity) {
48 return $this->_dataMapper
->save($entity);
51 public function findByUserId($id, IDownloadQueryConstraints
$constraints = null
)
53 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
54 $queryBuilder->where('user_id', '=', $id);
56 return $this->applyConstraintsAndReturn($constraints, $queryBuilder);
59 public function findByFileId($id, IDownloadQueryConstraints
$constraints = null
)
61 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
62 $queryBuilder->where('file_id', '=', $id);
64 return $this->applyConstraintsAndReturn($constraints, $queryBuilder);
67 private function applyConstraintsAndReturn(IDownloadQueryConstraints
$constraints = NULL
, IQueryBuilder
$queryBuilder)
71 $constraints->applyTo($queryBuilder);
74 return $this->_dataMapper
->map('Download', $queryBuilder);