3 namespace DataAccess\StepMania
;
5 use DataAccess\StepMania\IPackRepository
;
6 use DataAccess\DataMapper\IDataMapper
;
7 use DataAccess\Queries\IQueryBuilderFactory
;
8 use Domain\Entities\StepMania\IPack
;
10 //TODO: Implement some sort of caching. Probably OK for now not to worry.
11 class PackRepository
implements IPackRepository
14 private $_queryBuilderFactory;
16 public function __construct(IDataMapper
$dataMapper, IQueryBuilderFactory
$queryBuilderFactory) {
17 $this->_dataMapper
= $dataMapper;
18 $this->_queryBuilderFactory
= $queryBuilderFactory;
21 public function findById($id) {
22 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
23 $queryBuilder->where('id', '=', $id);
25 $result = $this->_dataMapper
->map('Pack', $queryBuilder);
26 return reset($result);
29 public function findAll()
31 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
32 $queryBuilder->where('id', '>', 0);
34 $result = $this->_dataMapper
->map('Pack', $queryBuilder);
38 public function findRange($id, $limit)
40 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
41 $queryBuilder->where('id', '>=', $id)->limit($limit);
43 return $this->_dataMapper
->map('Pack', $queryBuilder);
46 public function save(IPack
$entity) {
47 return $this->_dataMapper
->save($entity);
51 public function remove(IPack
$entity) {
55 public function findByTitle($title)
57 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
58 $queryBuilder->where('title', 'LIKE', "%%$title%%");
60 return $this->_dataMapper
->map('Pack', $queryBuilder);
63 public function findByContributor($artistName)
65 $queryBuilder = $this->_queryBuilderFactory
->createInstance();
66 $queryBuilder->join('inner', 'packs', 'id', 'simfiles', 'pack_id')
67 ->join('inner', 'simfiles', 'id', 'steps', 'simfile_id')
68 ->join('inner', 'steps', 'step_artist_id', 'step_artists', 'id')
69 ->where('tag', 'LIKE', "%%$artistName%%");
71 return $this->_dataMapper
->map('Pack', $queryBuilder);