Skip to content

Commit 351e39c

Browse files
committed
Implemented the repository pattern
1 parent e62fd3c commit 351e39c

File tree

10 files changed

+88
-20
lines changed

10 files changed

+88
-20
lines changed

app/Console/Commands/CreateUser.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44

55
namespace App\Console\Commands;
66

7-
use App\Models\User;
7+
use App\Repository\UserRepositoryInterface;
88
use Illuminate\Console\Command;
9-
use Illuminate\Contracts\Hashing\Hasher;
109

1110
final class CreateUser extends Command
1211
{
@@ -22,12 +21,12 @@ public function handle(): int
2221
$email = $this->argument('Email');
2322
$password = $this->argument('Password');
2423

25-
$hasher = app()->get(Hasher::class);
24+
$userRepository = app()->get(UserRepositoryInterface::class);
2625

27-
factory(User::class)->create([
26+
$userRepository->create([
2827
'name' => $name,
2928
'email' => $email,
30-
'password' => $hasher->make($password)
29+
'password' => $password
3130
]);
3231

3332
$this->line('User created!');

app/Http/Controllers/Auth/RegisterController.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use App\Http\Controllers\AbstractController;
88
use App\Models\User;
99
use App\Providers\RouteServiceProvider;
10+
use App\Repository\UserRepositoryInterface;
1011
use Illuminate\Contracts\Validation\Factory as Validation;
1112
use Illuminate\Contracts\Validation\Validator;
1213
use Illuminate\Foundation\Auth\RegistersUsers;
@@ -35,7 +36,8 @@ protected function validator(array $data): Validator
3536

3637
protected function create(array $data): User
3738
{
38-
return factory(User::class)->create([
39+
$userRepository = app()->get(UserRepositoryInterface::class);
40+
return $userRepository->create([
3941
'name' => $data['name'],
4042
'email' => $data['email'],
4143
'password' => $data['password']

app/Listeners/TestEventListener.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44

55
namespace App\Listeners;
66

7-
use App\Models\User;
7+
use App\Repository\UserRepositoryInterface;
88

99
final class TestEventListener
1010
{
1111
public function handle(): void
1212
{
13-
factory(User::class)->create();
13+
$userRepository = app()->get(UserRepositoryInterface::class);
14+
$userRepository->create();
1415
}
1516
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Providers;
6+
7+
use App\Repository\Eloquent\UserRepository;
8+
use App\Repository\UserRepositoryInterface;
9+
use Illuminate\Support\ServiceProvider;
10+
11+
final class RepositoryServiceProvider extends ServiceProvider
12+
{
13+
public function register(): void
14+
{
15+
app()->bind(UserRepositoryInterface::class, UserRepository::class);
16+
}
17+
18+
public function boot(): void
19+
{
20+
//
21+
}
22+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Repository\Eloquent;
6+
7+
use App\Models\User;
8+
use App\Repository\UserRepositoryInterface;
9+
use Illuminate\Database\Eloquent\Model;
10+
11+
final class UserRepository implements UserRepositoryInterface
12+
{
13+
/**
14+
* @param array $attributes
15+
* @return User
16+
*/
17+
public function create(array $attributes = []): Model
18+
{
19+
return factory(User::class)->create($attributes);
20+
}
21+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Repository;
6+
7+
use Illuminate\Database\Eloquent\Model;
8+
use Illuminate\Foundation\Auth\User as BaseUser;
9+
10+
interface UserRepositoryInterface
11+
{
12+
/**
13+
* @param array $attributes
14+
* @return BaseUser
15+
*/
16+
public function create(array $attributes = []): Model;
17+
}

composer.lock

Lines changed: 7 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/app.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
App\Providers\AppServiceProvider::class,
6868
App\Providers\AuthServiceProvider::class,
6969
App\Providers\EventServiceProvider::class,
70+
App\Providers\RepositoryServiceProvider::class,
7071
App\Providers\RouteServiceProvider::class,
7172

7273
],

database/seeds/UserSeeder.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22

33
declare(strict_types=1);
44

5-
use App\Models\User;
5+
use App\Repository\UserRepositoryInterface;
66
use Illuminate\Database\Seeder;
77

88
final class UserSeeder extends Seeder
99
{
1010
public function run(): void
1111
{
12-
factory(User::class)->create([
12+
$userRepository = app()->get(UserRepositoryInterface::class);
13+
$userRepository->create([
1314
'name' => 'John Doe',
1415
'email' => 'john_doe@gmail.com',
1516
'password' => '123456'

tests/Functional/LaravelModuleCest.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
namespace Tests\Functional;
66

77
use App\Events\TestEvent;
8-
use App\Http\Controllers\TestController;
98
use App\Models\User;
9+
use App\Repository\UserRepositoryInterface;
1010
use App\Utils\Contracts\StringConverterInterface;
1111
use App\Utils\Repeat;
1212
use App\Utils\ToUppercase;
@@ -19,8 +19,9 @@ final class LaravelModuleCest
1919
{
2020
public function amLoggedAs(FunctionalTester $I)
2121
{
22+
$userRepository = app()->get(UserRepositoryInterface::class);
2223
/** @var array $user */
23-
$user = factory(User::class)->create();
24+
$user = $userRepository->create();
2425
$I->amLoggedAs($user);
2526
$I->amOnPage('/home');
2627
$I->see('You are logged in!');
@@ -85,8 +86,9 @@ public function disableMiddleware(FunctionalTester $I)
8586

8687
public function disableModelEvents(FunctionalTester $I)
8788
{
89+
$userRepository = app()->get(UserRepositoryInterface::class);
8890
/** @var User $user */
89-
$user = factory(User::class)->create([
91+
$user = $userRepository->create([
9092
'email' => 'john_doe@original.com',
9193
'password' => 'password',
9294
]);
@@ -366,7 +368,8 @@ public function seeNumRecords(FunctionalTester $I)
366368

367369
public function seeRecord(FunctionalTester $I)
368370
{
369-
factory(User::class)->create([
371+
$userRepository = app()->get(UserRepositoryInterface::class);
372+
$userRepository->create([
370373
'email' => 'jane_doe@gmail.com',
371374
'password' => '123456'
372375
]);

0 commit comments

Comments
 (0)