diff --git a/.env.example b/.env.example index b0116de..4aae000 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,4 @@ -APP_NAME='Voucher Shop' +APP_NAME='Voucher App' APP_ENV=local APP_KEY= APP_DEBUG=true diff --git a/Dockerfile b/Dockerfile index a5afe17..728b858 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,8 +32,13 @@ RUN apt-get update && apt-get dist-upgrade -y && \ # Clear cache RUN apt-get clean && rm -rf /var/lib/apt/lists/* -# Install PHP extensions -RUN docker-php-ext-install pdo mysqli pdo_mysql mbstring exif pcntl bcmath gd intl zip pgsql pdo_pgsql curl xml +# Install PHP extensions (default version) +# RUN docker-php-ext-install pdo mysqli pdo_mysql mbstring exif pcntl bcmath gd intl zip pgsql pdo_pgsql curl xml + +# Install PHP extension with install php extension +ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ +RUN chmod +x /usr/local/bin/install-php-extensions +RUN install-php-extensions pdo mysqli pdo_mysql mbstring exif pcntl bcmath gd intl zip pgsql pdo_pgsql curl xml # Get latest Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer diff --git a/README.md b/README.md index 5ea6f22..be0f80e 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,14 @@ -# Voucher Online Shop - -[fill desc here] +# Laravel Template - Flowbite +This just a laravel template with breeze react, user role based access crud with setup flowbite admin template ## Support me Trakteer Saya ## Requirements -- PHP 8.1 or latest -- Node 16+ or latest +- PHP 8.1 or latest +- Node 16+ or latest ## How to run diff --git a/app/Http/Controllers/RoleController.php b/app/Http/Controllers/RoleController.php index 3405630..5f9c6ee 100644 --- a/app/Http/Controllers/RoleController.php +++ b/app/Http/Controllers/RoleController.php @@ -41,7 +41,7 @@ class RoleController extends Controller $request->validate([ 'name' => 'string|required|max:255', 'permissions' => 'array|required', - 'permissions.*.id' => 'uuid|required|exists:permissions,id', + 'permissions.*.id' => 'ulid|required|exists:permissions,id', ]); DB::beginTransaction(); @@ -71,7 +71,7 @@ class RoleController extends Controller $request->validate([ 'name' => 'string|required|max:255', 'permissions' => 'array|required', - 'permissions.*.id' => 'uuid|required|exists:permissions,id', + 'permissions.*.id' => 'ulid|required|exists:permissions,id', ]); if ($role->flag == 1) { diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 9ebe010..6aea49a 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -30,7 +30,7 @@ class UserController extends Controller 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users,email', 'password' => 'required|string|max:255', - 'role_id' => 'required|uuid|exists:roles,id', + 'role_id' => 'required|ulid|exists:roles,id', ]); User::create([ @@ -54,7 +54,7 @@ class UserController extends Controller if ($user->role != null) { $request->validate([ - 'role_id' => 'required|uuid|exists:roles,id', + 'role_id' => 'required|ulid|exists:roles,id', ]); } diff --git a/app/Http/Middleware/HttpSecureAware.php b/app/Http/Middleware/HttpSecureAware.php index dc9acac..dc32d07 100644 --- a/app/Http/Middleware/HttpSecureAware.php +++ b/app/Http/Middleware/HttpSecureAware.php @@ -23,4 +23,4 @@ class HttpSecureAware return $next($request); } -} \ No newline at end of file +} diff --git a/app/Models/Banner.php b/app/Models/Banner.php new file mode 100644 index 0000000..e643a9f --- /dev/null +++ b/app/Models/Banner.php @@ -0,0 +1,14 @@ +uuid('id')->primary(); + $table->ulid('id')->primary(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->string('reset_token')->nullable(); - $table->uuid('role_id')->nullable(); + $table->ulid('role_id')->nullable(); $table->rememberToken(); $table->timestamps(); }); diff --git a/database/migrations/2023_02_05_130618_create_settings_table.php b/database/migrations/2023_02_05_130618_create_settings_table.php index 7983a30..9a71b09 100644 --- a/database/migrations/2023_02_05_130618_create_settings_table.php +++ b/database/migrations/2023_02_05_130618_create_settings_table.php @@ -14,7 +14,7 @@ return new class extends Migration public function up() { Schema::create('settings', function (Blueprint $table) { - $table->uuid('id')->primary(); + $table->ulid('id')->primary(); $table->string('key'); $table->text('value'); $table->string('type'); diff --git a/database/migrations/2023_02_05_153325_create_roles_table.php b/database/migrations/2023_02_05_153325_create_roles_table.php index d12c9b0..a2fd1a3 100644 --- a/database/migrations/2023_02_05_153325_create_roles_table.php +++ b/database/migrations/2023_02_05_153325_create_roles_table.php @@ -14,13 +14,13 @@ return new class extends Migration public function up() { Schema::create('roles', function (Blueprint $table) { - $table->uuid('id')->primary(); + $table->ulid('id')->primary(); $table->string('name'); $table->timestamps(); $table->softDeletes(); - $table->uuid('created_by')->nullable(); - $table->uuid('updated_by')->nullable(); - $table->uuid('deleted_by')->nullable(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); }); } diff --git a/database/migrations/2023_02_05_153330_create_role_permissions_table.php b/database/migrations/2023_02_05_153330_create_role_permissions_table.php index 0a086b0..5bb7bf3 100644 --- a/database/migrations/2023_02_05_153330_create_role_permissions_table.php +++ b/database/migrations/2023_02_05_153330_create_role_permissions_table.php @@ -14,9 +14,9 @@ return new class extends Migration public function up() { Schema::create('role_permissions', function (Blueprint $table) { - $table->uuid('id')->primary(); - $table->uuid('role_id'); - $table->uuid('permission_id'); + $table->ulid('id')->primary(); + $table->ulid('role_id'); + $table->ulid('permission_id'); $table->timestamps(); $table->softDeletes(); }); diff --git a/database/migrations/2023_05_24_130511_create_banners_table.php b/database/migrations/2023_05_24_130511_create_banners_table.php new file mode 100644 index 0000000..eed05b8 --- /dev/null +++ b/database/migrations/2023_05_24_130511_create_banners_table.php @@ -0,0 +1,38 @@ +ulid('id')->primary(); + + $table->string('image'); + $table->string('title'); + $table->string('description')->nullable(); + $table->string('destination')->nullable(); + $table->string('type')->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('banners'); + } +}; diff --git a/database/migrations/2023_05_24_130521_create_notifications_table.php b/database/migrations/2023_05_24_130521_create_notifications_table.php new file mode 100644 index 0000000..6a2ad36 --- /dev/null +++ b/database/migrations/2023_05_24_130521_create_notifications_table.php @@ -0,0 +1,37 @@ +ulid('id')->primary(); + + $table->string('entity_type')->nullable(); + $table->ulid('entity_id')->nullable(); + $table->string('description')->nullable(); + $table->smallInteger('is_read')->default(0); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('notifications'); + } +}; diff --git a/database/migrations/2023_05_24_130522_create_vouchers_table.php b/database/migrations/2023_05_24_130522_create_vouchers_table.php new file mode 100644 index 0000000..e1a99fa --- /dev/null +++ b/database/migrations/2023_05_24_130522_create_vouchers_table.php @@ -0,0 +1,45 @@ +ulid('id')->primary(); + + $table->string('name')->nullable(); + $table->string('description')->nullable(); + $table->ulid('location_id')->nullable(); + $table->string('username')->nullable(); + $table->string('password')->nullable(); + $table->decimal('price', 20, 2)->default(0); + $table->decimal('discount', 20, 0)->default(0); + $table->decimal('display_price', 20, 2)->default(0); + $table->string('quota')->nullable(); + $table->string('profile')->nullable(); + $table->text('comment')->nullable(); + $table->string('expired')->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('vouchers'); + } +}; diff --git a/database/migrations/2023_05_24_130523_create_voucher_prices_table.php b/database/migrations/2023_05_24_130523_create_voucher_prices_table.php new file mode 100644 index 0000000..2c048d9 --- /dev/null +++ b/database/migrations/2023_05_24_130523_create_voucher_prices_table.php @@ -0,0 +1,36 @@ +ulid('id')->primary(); + + $table->ulid('customer_level_id')->nullable(); + $table->ulid('voucher_id')->nullable(); + $table->decimal('price', 20, 2)->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('voucher_prices'); + } +}; diff --git a/database/migrations/2023_05_24_130552_create_customers_table.php b/database/migrations/2023_05_24_130552_create_customers_table.php new file mode 100644 index 0000000..ab6d87f --- /dev/null +++ b/database/migrations/2023_05_24_130552_create_customers_table.php @@ -0,0 +1,46 @@ +ulid('id')->primary(); + + $table->string('email')->nullable(); + $table->string('password')->nullable(); + $table->string('name')->nullable(); + $table->string('fullname')->nullable(); + $table->text('address')->nullable(); + $table->string('phone')->nullable(); + $table->string('image')->nullable(); + $table->string('referral_code')->nullable(); + $table->string('google_id')->nullable(); + $table->decimal('deposit_balance', 20, 2)->default(0); + $table->decimal('coin_balance', 20, 2)->default(0); + $table->smallInteger('identity_verified')->nullable(); + $table->string('identity_image')->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('customers'); + } +}; diff --git a/database/migrations/2023_05_24_130604_create_locations_table.php b/database/migrations/2023_05_24_130604_create_locations_table.php new file mode 100644 index 0000000..9e3f233 --- /dev/null +++ b/database/migrations/2023_05_24_130604_create_locations_table.php @@ -0,0 +1,36 @@ +ulid('id')->primary(); + + $table->string('name')->nullable(); + $table->string('description')->nullable(); + $table->string('logo')->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('locations'); + } +}; diff --git a/database/migrations/2023_05_24_130630_create_customer_levels_table.php b/database/migrations/2023_05_24_130630_create_customer_levels_table.php new file mode 100644 index 0000000..d775b53 --- /dev/null +++ b/database/migrations/2023_05_24_130630_create_customer_levels_table.php @@ -0,0 +1,36 @@ +ulid('id')->primary(); + + $table->string('name')->nullable(); + $table->string('description')->nullable(); + $table->string('key')->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('customer_levels'); + } +}; diff --git a/database/migrations/2023_05_24_130641_create_customer_level_histories_table.php b/database/migrations/2023_05_24_130641_create_customer_level_histories_table.php new file mode 100644 index 0000000..7ec4532 --- /dev/null +++ b/database/migrations/2023_05_24_130641_create_customer_level_histories_table.php @@ -0,0 +1,36 @@ +ulid('id')->primary(); + + $table->ulid('customer_id')->nullable(); + $table->ulid('customer_level_id')->nullable(); + $table->timestamp('date_time')->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('customer_level_histories'); + } +}; diff --git a/database/migrations/2023_05_24_130646_create_deposit_histories_table.php b/database/migrations/2023_05_24_130646_create_deposit_histories_table.php new file mode 100644 index 0000000..4c822c4 --- /dev/null +++ b/database/migrations/2023_05_24_130646_create_deposit_histories_table.php @@ -0,0 +1,39 @@ +ulid('id')->primary(); + + $table->decimal('debit', 20, 2)->default(0); + $table->decimal('credit', 20, 2)->default(0); + $table->text('description')->nullable(); + $table->ulid('customer_id')->nullable(); + $table->string('related_type')->nullable(); + $table->string('related_id')->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('deposit_histories'); + } +}; diff --git a/database/migrations/2023_05_24_130650_create_coin_histories_table.php b/database/migrations/2023_05_24_130650_create_coin_histories_table.php new file mode 100644 index 0000000..ed10528 --- /dev/null +++ b/database/migrations/2023_05_24_130650_create_coin_histories_table.php @@ -0,0 +1,39 @@ +ulid('id')->primary(); + + $table->decimal('debit', 20, 2)->default(0); + $table->decimal('credit', 20, 2)->default(0); + $table->text('description')->nullable(); + $table->ulid('customer_id')->nullable(); + $table->string('related_type')->nullable(); + $table->string('related_id')->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('coin_histories'); + } +}; diff --git a/database/migrations/2023_05_24_130709_create_customer_refferals_table.php b/database/migrations/2023_05_24_130709_create_customer_refferals_table.php new file mode 100644 index 0000000..f364e96 --- /dev/null +++ b/database/migrations/2023_05_24_130709_create_customer_refferals_table.php @@ -0,0 +1,36 @@ +ulid('id')->primary(); + + $table->ulid('customer_id')->nullable(); + $table->ulid('refferal_id')->nullable(); + $table->string('customer_code')->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('customer_refferals'); + } +}; diff --git a/database/migrations/2023_05_24_130715_create_sales_table.php b/database/migrations/2023_05_24_130715_create_sales_table.php new file mode 100644 index 0000000..d1f4e16 --- /dev/null +++ b/database/migrations/2023_05_24_130715_create_sales_table.php @@ -0,0 +1,42 @@ +ulid('id')->primary(); + + $table->ulid('customer_id')->nullable(); + $table->timestamp('date_time')->nullable(); + $table->decimal('amount', 20, 2)->default(0); + $table->string('payed_with')->nullable(); + $table->string('payment_token')->nullable(); + $table->string('payment_status')->nullable(); + $table->string('payment_response')->nullable(); + $table->string('payment_channel')->nullable(); + $table->string('payment_type')->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sales'); + } +}; diff --git a/database/migrations/2023_05_24_130718_create_sale_items_table.php b/database/migrations/2023_05_24_130718_create_sale_items_table.php new file mode 100644 index 0000000..a019eb1 --- /dev/null +++ b/database/migrations/2023_05_24_130718_create_sale_items_table.php @@ -0,0 +1,38 @@ +ulid('id')->primary(); + + $table->ulid('sale_id')->nullable(); + $table->string('entity_type')->nullable(); + $table->ulid('entity_id')->nullable(); + $table->decimal('price', 20, 2)->default(0); + $table->text('additional_info_json')->nullable(); + + $table->timestamps(); + $table->softDeletes(); + $table->ulid('created_by')->nullable(); + $table->ulid('updated_by')->nullable(); + $table->ulid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sale_items'); + } +}; diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php index 4c6dc90..50d22e9 100644 --- a/database/seeders/PermissionSeeder.php +++ b/database/seeders/PermissionSeeder.php @@ -19,27 +19,27 @@ class PermissionSeeder extends Seeder public function run() { $permissions = [ - ['id' => Str::uuid(), 'label' => 'View Dashboard', 'name' => 'view-dashboard'], + ['id' => Str::ulid(), 'label' => 'View Dashboard', 'name' => 'view-dashboard'], - ['id' => Str::uuid(), 'label' => 'Create User', 'name' => 'create-user'], - ['id' => Str::uuid(), 'label' => 'Update User', 'name' => 'update-user'], - ['id' => Str::uuid(), 'label' => 'View User', 'name' => 'view-user'], - ['id' => Str::uuid(), 'label' => 'Delete User', 'name' => 'delete-user'], + ['id' => Str::ulid(), 'label' => 'Create User', 'name' => 'create-user'], + ['id' => Str::ulid(), 'label' => 'Update User', 'name' => 'update-user'], + ['id' => Str::ulid(), 'label' => 'View User', 'name' => 'view-user'], + ['id' => Str::ulid(), 'label' => 'Delete User', 'name' => 'delete-user'], - ['id' => Str::uuid(), 'label' => 'Create Role', 'name' => 'create-role'], - ['id' => Str::uuid(), 'label' => 'Update Role', 'name' => 'update-role'], - ['id' => Str::uuid(), 'label' => 'View Role', 'name' => 'view-role'], - ['id' => Str::uuid(), 'label' => 'Delete Role', 'name' => 'delete-role'], + ['id' => Str::ulid(), 'label' => 'Create Role', 'name' => 'create-role'], + ['id' => Str::ulid(), 'label' => 'Update Role', 'name' => 'update-role'], + ['id' => Str::ulid(), 'label' => 'View Role', 'name' => 'view-role'], + ['id' => Str::ulid(), 'label' => 'Delete Role', 'name' => 'delete-role'], ]; - foreach($permissions as $permission) { + foreach ($permissions as $permission) { Permission::insert($permission); } $role = Role::create(['name' => 'admin']); $permissions = Permission::all(); - foreach($permissions as $permission) { + foreach ($permissions as $permission) { $role->rolePermissions()->create(['permission_id' => $permission->id]); } @@ -56,8 +56,7 @@ class PermissionSeeder extends Seeder 'role_id' => $role->id, ]); - $setting = [ - ]; + $setting = []; Setting::insert($setting); } diff --git a/docker-compose.yml b/docker-compose.yml index cb3b08b..160ca97 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,8 +7,8 @@ services: uid: 1000 context: ./ dockerfile: ./Dockerfile - image: template - container_name: template-app + image: voucher + container_name: voucher-app working_dir: /var/www/ volumes: - ./:/var/www @@ -19,10 +19,10 @@ services: mem_reservation: 128M cpus: 0.5 networks: - - template + - voucher nginx: image: nginx:1.17-alpine - container_name: template-nginx + container_name: voucher-nginx ports: - 8000:80 volumes: @@ -32,59 +32,10 @@ services: mem_reservation: 128M cpus: 0.5 networks: - - template - mariadb: - image: mariadb:latest - container_name: template-mariadb - ports: - - 3306:3306 - volumes: - - mariadb:/var/lib/mysql - - ./database:/database - environment: - MARIADB_DATABASE: app - MARIADB_USER: app - MARIADB_PASSWORD: password - MARIADB_ROOT_PASSWORD: password - mem_limit: 512m - mem_reservation: 128M - cpus: 0.5 - networks: - template: - ipv4_address: 10.8.0.99 - postgresql: - # image: postgres:latest - image: postgres:14-alpine3.17 - container_name: template-postgres - restart: always - ports: - - 5432:5432 - volumes: - - postgres:/var/lib/postgresql/data - - ./database:/database - environment: - POSTGRES_DB: app - POSTGRES_USER: app - POSTGRES_PASSWORD: password - mem_limit: 512m - mem_reservation: 128M - cpus: 0.5 - networks: - template: - ipv4_address: 10.8.0.96 - redis: - image: redis - container_name: template-redis - ports: - - 6379:6379 - mem_limit: 512m - mem_reservation: 128M - cpus: 0.5 - networks: - - template + - voucher nodejs: image: node:16-alpine - container_name: template-node + container_name: voucher-node ports: - 5173:5173 volumes: @@ -95,19 +46,13 @@ services: mem_reservation: 128M cpus: 0.5 networks: - - template - -volumes: - mariadb: - driver: local - postgres: - driver: local + - voucher networks: - template: + voucher: driver: bridge ipam: driver: default config: - - subnet: 10.18.10.0/24 - gateway: 10.18.10.1 + - subnet: 10.25.10.0/24 + gateway: 10.25.10.1 diff --git a/routes/auth.php b/routes/auth.php index 8b7f6bd..a126089 100644 --- a/routes/auth.php +++ b/routes/auth.php @@ -13,47 +13,47 @@ use Illuminate\Support\Facades\Route; Route::middleware('guest')->group(function () { Route::get('register', [RegisteredUserController::class, 'create']) - ->name('register'); + ->name('register'); Route::post('register', [RegisteredUserController::class, 'store']); Route::get('login', [AuthenticatedSessionController::class, 'create']) - ->name('login'); + ->name('login'); Route::post('login', [AuthenticatedSessionController::class, 'store']); Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) - ->name('password.request'); + ->name('password.request'); Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) - ->name('password.email'); + ->name('password.email'); Route::get('reset-password/{token}', [NewPasswordController::class, 'create']) - ->name('password.reset'); + ->name('password.reset'); Route::post('reset-password', [NewPasswordController::class, 'store']) - ->name('password.store'); + ->name('password.store'); }); Route::middleware('auth')->group(function () { Route::get('verify-email', [EmailVerificationPromptController::class, '__invoke']) - ->name('verification.notice'); + ->name('verification.notice'); Route::get('verify-email/{id}/{hash}', [VerifyEmailController::class, '__invoke']) - ->middleware(['signed', 'throttle:6,1']) - ->name('verification.verify'); + ->middleware(['signed', 'throttle:6,1']) + ->name('verification.verify'); Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store']) - ->middleware('throttle:6,1') - ->name('verification.send'); + ->middleware('throttle:6,1') + ->name('verification.send'); Route::get('confirm-password', [ConfirmablePasswordController::class, 'show']) - ->name('password.confirm'); + ->name('password.confirm'); Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); Route::put('password', [PasswordController::class, 'update'])->name('password.update'); Route::post('logout', [AuthenticatedSessionController::class, 'destroy']) - ->name('logout'); + ->name('logout'); });