Skip to content

Commit 719b77a

Browse files
committed
Repository pattern: first steps
1 parent 94f945a commit 719b77a

File tree

2 files changed

+63
-18
lines changed

2 files changed

+63
-18
lines changed

app/Http/Controllers/TicketsController.php

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,23 @@
66
use TeachMe\Http\Requests;
77

88
use Illuminate\Http\Request;
9+
use TeachMe\Repositories\TicketRepository;
910

1011
class TicketsController extends Controller {
1112

12-
protected function selectTicketsList()
13+
/**
14+
* @var TicketRepository
15+
*/
16+
private $ticketRepository;
17+
18+
public function __construct(TicketRepository $ticketRepository)
1319
{
14-
return Ticket::selectRaw(
15-
'tickets.*, '
16-
. '( SELECT COUNT(*) FROM ticket_comments WHERE ticket_comments.ticket_id = tickets.id ) as num_comments,'
17-
. '( SELECT COUNT(*) FROM ticket_votes WHERE ticket_votes.ticket_id = tickets.id ) as num_votes'
18-
)->with('author');
20+
$this->ticketRepository = $ticketRepository;
1921
}
2022

2123
public function latest()
2224
{
23-
$tickets = $this->selectTicketsList()
24-
->orderBy('created_at', 'DESC')
25-
->paginate(20);
25+
$tickets = $this->ticketRepository->paginateLatest();
2626

2727
return view('tickets/list', compact('tickets'));
2828
}
@@ -34,25 +34,19 @@ public function popular()
3434

3535
public function open()
3636
{
37-
$tickets = $this->selectTicketsList()
38-
->where('status', 'open')
39-
->orderBy('created_at', 'DESC')
40-
->paginate(20);
37+
$tickets = $this->ticketRepository->paginateOpen();
4138
return view('tickets/list', compact('tickets'));
4239
}
4340

4441
public function closed()
4542
{
46-
$tickets = $this->selectTicketsList()
47-
->where('status', 'closed')
48-
->orderBy('created_at', 'DESC')
49-
->paginate(20);
43+
$tickets = $this->ticketRepository->paginateClosed();
5044
return view('tickets/list', compact('tickets'));
5145
}
5246

5347
public function details($id)
5448
{
55-
$ticket = Ticket::findOrFail($id);
49+
$ticket = $this->ticketRepository->findOrFail($id);
5650
return view('tickets/details', compact('ticket'));
5751
}
5852

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
namespace TeachMe\Repositories;
4+
5+
use TeachMe\Entities\Ticket;
6+
7+
class TicketRepository {
8+
9+
public function getModel()
10+
{
11+
return new Ticket();
12+
}
13+
14+
protected function selectTicketsList()
15+
{
16+
return Ticket::selectRaw(
17+
'tickets.*, '
18+
. '( SELECT COUNT(*) FROM ticket_comments WHERE ticket_comments.ticket_id = tickets.id ) as num_comments,'
19+
. '( SELECT COUNT(*) FROM ticket_votes WHERE ticket_votes.ticket_id = tickets.id ) as num_votes'
20+
)->with('author');
21+
}
22+
23+
public function paginateLatest()
24+
{
25+
return $this->selectTicketsList()
26+
->orderBy('created_at', 'DESC')
27+
->paginate(20);
28+
}
29+
30+
public function paginateOpen()
31+
{
32+
return $this->selectTicketsList()
33+
->where('status', 'open')
34+
->orderBy('created_at', 'DESC')
35+
->paginate(20);
36+
}
37+
38+
public function paginateClosed()
39+
{
40+
return $this->selectTicketsList()
41+
->where('status', 'closed')
42+
->orderBy('created_at', 'DESC')
43+
->paginate(20);
44+
}
45+
46+
public function findOrFail($id)
47+
{
48+
return Ticket::findOrFail($id);
49+
}
50+
51+
}

0 commit comments

Comments
 (0)