diff --git a/resources/views/clerk_user_repository.blade.php b/resources/views/clerk_user_repository.blade.php new file mode 100644 index 0000000..4e8954f --- /dev/null +++ b/resources/views/clerk_user_repository.blade.php @@ -0,0 +1,20 @@ +namespace App\Support\Clerk; + +use App\Models\Role; +use App\Models\User; +use Lcobucci\JWT\Token; +use RonasIT\Clerk\Repositories\UserRepository; + +class ClerkUserRepository extends UserRepository +{ + public function fromToken(Token $token): User + { + $user = parent::fromToken($token); + + return User::firstOrCreate([ + 'clerk_id' => $user->getAuthIdentifier(), + ], [ + 'role_id' => Role::USER, + ]); + } +} \ No newline at end of file diff --git a/src/Commands/InitCommand.php b/src/Commands/InitCommand.php index c894a1d..c07f4f3 100644 --- a/src/Commands/InitCommand.php +++ b/src/Commands/InitCommand.php @@ -128,10 +128,10 @@ public function handle(): void } $this->createOrUpdateConfigFile('.env.development', '=', $data); - $this->createOrUpdateConfigFile($envFile, '=', $data); + $this->createOrUpdateConfigFile('.env.example', '=', $data); - if ($envFile !== '.env.example') { - $this->createOrUpdateConfigFile('.env.example', '=', $data); + if ($envFile === '.env') { + $this->createOrUpdateConfigFile($envFile, '=', $data); } } @@ -219,7 +219,7 @@ public function handle(): void protected function setAutoDocContactEmail(string $email): void { $config = ArrayFile::open(base_path('config/auto-doc.php')); - + $config->set('info.contact.email', $email); $config->write(); @@ -245,7 +245,7 @@ protected function createAdminUser(string $kebabName): void $this->publishMigration( view: view('initializator::add_default_user')->with($this->adminCredentials), - migrationName: 'add_default_user' + migrationName: 'add_default_user', ); } } @@ -396,15 +396,26 @@ protected function addQuotes($string): string return (Str::contains($string, ' ')) ? "\"{$string}\"" : $string; } + protected function publishClass(View $template, string $fileName, string $filePath): void + { + $fileName = "{$fileName}.php"; + + if (!is_dir($filePath)) { + mkdir($filePath, 0777, true); + } + + $data = $template->render(); + + file_put_contents("{$filePath}/{$fileName}", "format('Y_m_d_His'); - $migrationName = "{$time}_{$migrationName}.php"; - - $data = $view->render(); + $migrationName = "{$time}_{$migrationName}"; - file_put_contents("database/migrations/{$migrationName}", "publishClass($view, $migrationName, 'database/migrations'); } protected function createOrUpdateConfigFile(string $fileName, string $separator, array $data): void @@ -543,5 +554,11 @@ protected function enableClerk(): void view: view('initializator::users_add_clerk_id_field'), migrationName: 'users_add_clerk_id_field', ); + + $this->publishClass( + template: view('initializator::clerk_user_repository'), + fileName: 'ClerkUserRepository', + filePath: 'app/Support/Clerk', + ); } } diff --git a/tests/InitCommandTest.php b/tests/InitCommandTest.php index 5523ba0..7397060 100644 --- a/tests/InitCommandTest.php +++ b/tests/InitCommandTest.php @@ -227,6 +227,10 @@ public function testRunWithAdminAndDefaultReadmeCreation() 'database/migrations/2018_11_11_111111_users_add_clerk_id_field.php', $this->getFixture('users_add_clerk_id_field_migration.php'), ], + [ + 'app/Support/Clerk/ClerkUserRepository.php', + $this->getFixture('clerk_user_repository.php'), + ], [ '.env.development', $this->getFixture('env.development_clerk_credentials_added.yml'), @@ -794,6 +798,10 @@ public function testRunWithClerkMobileApp(): void 'database/migrations/2018_11_11_111111_users_add_clerk_id_field.php', $this->getFixture('users_add_clerk_id_field_migration.php'), ], + [ + 'app/Support/Clerk/ClerkUserRepository.php', + $this->getFixture('clerk_user_repository.php'), + ], [ '.env.development', $this->getFixture('env.development_clerk_credentials_added_mobile_app.yml'), diff --git a/tests/fixtures/InitCommandTest/clerk_user_repository.php b/tests/fixtures/InitCommandTest/clerk_user_repository.php new file mode 100644 index 0000000..d35ab1c --- /dev/null +++ b/tests/fixtures/InitCommandTest/clerk_user_repository.php @@ -0,0 +1,22 @@ + $user->getAuthIdentifier(), + ], [ + 'role_id' => Role::USER, + ]); + } +} \ No newline at end of file