From 989bd03107547c04eca5d10db773ed1d0950fc57 Mon Sep 17 00:00:00 2001 From: Toni Agne Date: Tue, 8 Sep 2020 12:43:05 -0300 Subject: [PATCH] DEV: multi-user - migrations - list products vue --- app/Client.php | 21 + .../Auth/ConfirmPasswordController.php | 40 ++ .../Auth/ForgotPasswordController.php | 22 + app/Http/Controllers/Auth/LoginController.php | 68 +++ .../Controllers/Auth/RegisterController.php | 73 ++++ .../Auth/ResetPasswordController.php | 30 ++ .../Auth/VerificationController.php | 42 ++ .../Controllers/Client/ClientController.php | 25 ++ app/Http/Controllers/HomeController.php | 26 ++ app/Http/Controllers/ProductsController.php | 22 + .../Controllers/Vendor/VendorController.php | 20 + .../Middleware/RedirectIfAuthenticated.php | 10 +- app/Vendor.php | 21 + composer.json | 3 +- composer.lock | 57 ++- config/auth.php | 32 ++ database/factories/ProductFactory.php | 21 + ...2020_08_18_185306_create_vendors_table.php | 33 ++ ...2020_08_18_185317_create_clients_table.php | 37 ++ ...020_08_19_202850_create_products_table.php | 4 +- .../2020_08_20_125807_create_sales_table.php | 4 +- ..._20_135638_create_user_addresses_table.php | 7 +- ..._20_135707_create_user_documents_table.php | 12 +- ..._215118_add_some_fields_products_table.php | 27 ++ database/seeds/ClientSeeder.php | 20 + database/seeds/DatabaseSeeder.php | 3 +- database/seeds/ProductsSeeder.php | 16 + database/seeds/VendorSeeder.php | 16 + package-lock.json | 404 +++++++++--------- package.json | 15 +- resources/js/app.js | 16 + resources/js/bootstrap.js | 13 + .../js/components/home/Products/Products.vue | 46 ++ .../components/home/Products/buyProduct.vue | 44 ++ resources/js/routes.js | 10 + resources/js/store/modules/products.js | 31 ++ resources/js/store/store.js | 11 + resources/sass/_variables.scss | 19 + resources/sass/app.scss | 34 +- routes/web.php | 22 +- 40 files changed, 1136 insertions(+), 241 deletions(-) create mode 100644 app/Client.php create mode 100644 app/Http/Controllers/Auth/ConfirmPasswordController.php create mode 100644 app/Http/Controllers/Auth/ForgotPasswordController.php create mode 100644 app/Http/Controllers/Auth/LoginController.php create mode 100644 app/Http/Controllers/Auth/RegisterController.php create mode 100644 app/Http/Controllers/Auth/ResetPasswordController.php create mode 100644 app/Http/Controllers/Auth/VerificationController.php create mode 100644 app/Http/Controllers/Client/ClientController.php create mode 100644 app/Http/Controllers/HomeController.php create mode 100644 app/Http/Controllers/ProductsController.php create mode 100644 app/Http/Controllers/Vendor/VendorController.php create mode 100644 app/Vendor.php create mode 100644 database/factories/ProductFactory.php create mode 100644 database/migrations/2020_08_18_185306_create_vendors_table.php create mode 100644 database/migrations/2020_08_18_185317_create_clients_table.php create mode 100644 database/migrations/2020_09_07_215118_add_some_fields_products_table.php create mode 100644 database/seeds/ClientSeeder.php create mode 100644 database/seeds/ProductsSeeder.php create mode 100644 database/seeds/VendorSeeder.php create mode 100644 resources/js/components/home/Products/Products.vue create mode 100644 resources/js/components/home/Products/buyProduct.vue create mode 100644 resources/js/routes.js create mode 100644 resources/js/store/modules/products.js create mode 100644 resources/js/store/store.js create mode 100644 resources/sass/_variables.scss diff --git a/app/Client.php b/app/Client.php new file mode 100644 index 0000000..0d10697 --- /dev/null +++ b/app/Client.php @@ -0,0 +1,21 @@ +middleware('auth'); + } +} diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php new file mode 100644 index 0000000..465c39c --- /dev/null +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -0,0 +1,22 @@ + 'client.dash', 'vendor' => 'vendor.dash']; + /* + |-------------------------------------------------------------------------- + | Login Controller + |-------------------------------------------------------------------------- + | + | This controller handles authenticating users for the application and + | redirecting them to your home screen. The controller uses a trait + | to conveniently provide its functionality to your applications. + | + */ + + use AuthenticatesUsers; + + /** + * Where to redirect users after login. + * + * @var string + */ + protected $redirectTo = RouteServiceProvider::HOME; + + /** + * Create a new controller instance. + * + * @return void + */ + public function __construct() + { + $this->middleware('guest')->except('logout'); + $this->middleware('guest:client')->except('logout'); + $this->middleware('guest:vendor')->except('logout'); + + } + + public function login(Request $request) + { + + $this->validate($request, [ + 'email' => 'required|email', + 'password' => 'required|min:6' + ]); + + foreach($this->guards as $guard => $route) { + + + if(Auth::guard($guard)->attempt(['email' => $request->email, 'password' => $request->password], $request->get('remember'))) { + + return redirect(route($route)); + } + + + } + + return redirect()->back()->withErrors(['password' => 'Login Inválido'])->withInput(); + } +} diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php new file mode 100644 index 0000000..c6a6de6 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -0,0 +1,73 @@ +middleware('guest'); + } + + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make($data, [ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'password' => ['required', 'string', 'min:8', 'confirmed'], + ]); + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * @return \App\User + */ + protected function create(array $data) + { + return User::create([ + 'name' => $data['name'], + 'email' => $data['email'], + 'password' => Hash::make($data['password']), + ]); + } +} diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php new file mode 100644 index 0000000..b1726a3 --- /dev/null +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -0,0 +1,30 @@ +middleware('auth'); + $this->middleware('signed')->only('verify'); + $this->middleware('throttle:6,1')->only('verify', 'resend'); + } +} diff --git a/app/Http/Controllers/Client/ClientController.php b/app/Http/Controllers/Client/ClientController.php new file mode 100644 index 0000000..a7b301f --- /dev/null +++ b/app/Http/Controllers/Client/ClientController.php @@ -0,0 +1,25 @@ +middleware('guest')->except('index'); + $this->middleware('guest:client')->except('index'); + $this->middleware('guest:vendor')->except('index'); + } + + public function index() + { + $products = Product::all(); + return response()->json(compact('products')); + } +} diff --git a/app/Http/Controllers/Vendor/VendorController.php b/app/Http/Controllers/Vendor/VendorController.php new file mode 100644 index 0000000..f2025bd --- /dev/null +++ b/app/Http/Controllers/Vendor/VendorController.php @@ -0,0 +1,20 @@ +check()) { + return redirect('/cliente'); + } + + if ($guard === "vendor" && Auth::guard($guard)->check()) { + return redirect('/vendedor'); + } + if (Auth::guard($guard)->check()) { - return redirect(RouteServiceProvider::HOME); + return redirect('/cliente'); } return $next($request); diff --git a/app/Vendor.php b/app/Vendor.php new file mode 100644 index 0000000..1b7c39c --- /dev/null +++ b/app/Vendor.php @@ -0,0 +1,21 @@ + 'users', ], + 'vendor' => [ + 'driver' => 'session', + 'provider' => 'vendors', + ], + + 'client' => [ + 'driver' => 'session', + 'provider' => 'clients', + ], + 'api' => [ 'driver' => 'token', 'provider' => 'users', @@ -71,6 +81,16 @@ 'model' => App\User::class, ], + 'vendors' => [ + 'driver' => 'eloquent', + 'model' => App\Vendor::class, + ], + + 'clients' => [ + 'driver' => 'eloquent', + 'model' => App\Client::class, + ], + // 'users' => [ // 'driver' => 'database', // 'table' => 'users', @@ -99,6 +119,18 @@ 'expire' => 60, 'throttle' => 60, ], + 'clients' => [ + 'provider' => 'clients', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + 'vendors' => [ + 'provider' => 'vendors', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], ], /* diff --git a/database/factories/ProductFactory.php b/database/factories/ProductFactory.php new file mode 100644 index 0000000..e62c286 --- /dev/null +++ b/database/factories/ProductFactory.php @@ -0,0 +1,21 @@ +define(Product::class, function (Faker $faker) { + $title = $faker->sentence; + $slug = Str::slug($title, '-'); + return [ + 'product_code' => $faker->unique()->numerify('ABC###'), + 'name' => $title, + 'slug' => $slug, + 'amount' => $faker->randomFloat(2, 10, 100), + 'description' => $faker->realText(200), + 'tag_line' => $faker->catchPhrase, + 'vendor_id' => 1 + ]; +}); + diff --git a/database/migrations/2020_08_18_185306_create_vendors_table.php b/database/migrations/2020_08_18_185306_create_vendors_table.php new file mode 100644 index 0000000..05af764 --- /dev/null +++ b/database/migrations/2020_08_18_185306_create_vendors_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->string('password'); + $table->rememberToken(); + + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('vendors'); + } +} diff --git a/database/migrations/2020_08_18_185317_create_clients_table.php b/database/migrations/2020_08_18_185317_create_clients_table.php new file mode 100644 index 0000000..090d7d1 --- /dev/null +++ b/database/migrations/2020_08_18_185317_create_clients_table.php @@ -0,0 +1,37 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->string('password'); + $table->rememberToken(); + + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('clients'); + } +} diff --git a/database/migrations/2020_08_19_202850_create_products_table.php b/database/migrations/2020_08_19_202850_create_products_table.php index 7a43f8f..1e30bdb 100644 --- a/database/migrations/2020_08_19_202850_create_products_table.php +++ b/database/migrations/2020_08_19_202850_create_products_table.php @@ -18,11 +18,11 @@ public function up() $table->string('slug')->index()->comment('Código do produto, pelo qual será procurado.'); $table->string('name')->comment('Nome do produto, informado pelo vendedor.'); $table->decimal('amount', 10, 2)->comment('Valor do produto em reais.'); - $table->unsignedBigInteger('user_id')->index()->comment('ID referente ao usuário dono do produto.'); + $table->unsignedBigInteger('vendor_id')->index()->comment('ID referente ao usuário dono do produto.'); $table->timestamps(); # Chaves estrangeiras - $table->foreign('user_id')->references('id')->on('users'); + $table->foreign('vendor_id')->references('id')->on('vendors'); }); } diff --git a/database/migrations/2020_08_20_125807_create_sales_table.php b/database/migrations/2020_08_20_125807_create_sales_table.php index 2625638..960bcd7 100644 --- a/database/migrations/2020_08_20_125807_create_sales_table.php +++ b/database/migrations/2020_08_20_125807_create_sales_table.php @@ -20,12 +20,12 @@ public function up() $table->enum('status', ['approved', 'rejected', 'pending'])->comment('Status do pagamento da transação.'); $table->integer('installments')->comment('Número de parcelas que o cliente escolheu pagar.'); $table->unsignedBigInteger('product_id')->index()->comment('ID referente à tabela de produtos.'); - $table->unsignedBigInteger('user_id')->index()->comment('ID referente à tabela de usuários. Usuário quem comprou.'); + $table->unsignedBigInteger('client_id')->index()->comment('ID referente à tabela de usuários. Usuário quem comprou.'); $table->timestamps(); # Chaves estrangeiras $table->foreign('product_id')->references('id')->on('products'); - $table->foreign('user_id')->references('id')->on('users'); + $table->foreign('client_id')->references('id')->on('clients'); }); } diff --git a/database/migrations/2020_08_20_135638_create_user_addresses_table.php b/database/migrations/2020_08_20_135638_create_user_addresses_table.php index c5abf33..7926e9b 100644 --- a/database/migrations/2020_08_20_135638_create_user_addresses_table.php +++ b/database/migrations/2020_08_20_135638_create_user_addresses_table.php @@ -8,7 +8,7 @@ class CreateUserAddressesTable extends Migration { /** * Lista de estados do Brasil - * + * * @var array */ private array $statesAllowed = [ @@ -30,17 +30,14 @@ public function up() { Schema::create('user_addresses', function (Blueprint $table) { $table->id(); + $table->morphs('addressable'); $table->string('street_name')->comment('Nome da rua'); $table->string('street_number', 10)->default('S/N')->comment('Número da casa'); $table->string('complement')->nullable()->comment('Complemento da casa'); $table->string('neighborhood')->comment('Bairro do endereço'); $table->string('city')->comment('Nome da cidade do endereço'); $table->enum('state', $this->statesAllowed)->comment('Sigla de dois dígitos referente ao '); - $table->unsignedBigInteger('user_id')->index(); $table->timestamps(); - - # Chaves estrangeiras - $table->foreign('user_id')->references('id')->on('users'); }); } diff --git a/database/migrations/2020_08_20_135707_create_user_documents_table.php b/database/migrations/2020_08_20_135707_create_user_documents_table.php index 6f9dcfd..340a337 100644 --- a/database/migrations/2020_08_20_135707_create_user_documents_table.php +++ b/database/migrations/2020_08_20_135707_create_user_documents_table.php @@ -6,22 +6,18 @@ class CreateUserDocumentsTable extends Migration { - /** - * Run the migrations. - * - * @return void - */ + public function up() { Schema::create('user_documents', function (Blueprint $table) { $table->id(); + $table->morphs('documentable'); $table->enum('type', ['cpf', 'cnpj'])->comment('Tipo do documento'); $table->string('number')->comment('Somente números do documento.'); - $table->unsignedBigInteger('user_id')->index()->comment('Referencia o ID do usuário dono deste documento.'); + $table->timestamps(); - # Chaves estrangeiras - $table->foreign('user_id')->references('id')->on('users'); + }); } diff --git a/database/migrations/2020_09_07_215118_add_some_fields_products_table.php b/database/migrations/2020_09_07_215118_add_some_fields_products_table.php new file mode 100644 index 0000000..63c253a --- /dev/null +++ b/database/migrations/2020_09_07_215118_add_some_fields_products_table.php @@ -0,0 +1,27 @@ +string('product_code', '6')->nullable()->after('id'); + $table->longText('description')->after('amount'); + $table->mediumText('tag_line')->after('description'); + }); + } + + public function down() + { + Schema::table('products', function (Blueprint $table) { + $table->dropColumn('product_code'); + $table->dropColumn('description'); + $table->dropColumn('tag_line'); + }); + } +} diff --git a/database/seeds/ClientSeeder.php b/database/seeds/ClientSeeder.php new file mode 100644 index 0000000..750310f --- /dev/null +++ b/database/seeds/ClientSeeder.php @@ -0,0 +1,20 @@ +insert([ + 'name' => 'Cliente anonimo', + 'email' => 'cliente@gmail.com', + 'password' => Hash::make('123456'), + ]); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 237dfc5..74b8786 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -11,6 +11,7 @@ class DatabaseSeeder extends Seeder */ public function run() { - // $this->call(UserSeeder::class); + $this->call(VendorSeeder::class); + $this->call(ClientSeeder::class); } } diff --git a/database/seeds/ProductsSeeder.php b/database/seeds/ProductsSeeder.php new file mode 100644 index 0000000..b206413 --- /dev/null +++ b/database/seeds/ProductsSeeder.php @@ -0,0 +1,16 @@ +create(); + } +} diff --git a/database/seeds/VendorSeeder.php b/database/seeds/VendorSeeder.php new file mode 100644 index 0000000..f4e3c22 --- /dev/null +++ b/database/seeds/VendorSeeder.php @@ -0,0 +1,16 @@ +insert([ + 'name' => 'Vendedor anonimo', + 'email' => 'vendedor@gmail.com', + 'password' => Hash::make('123456'), + ]); + } +} diff --git a/package-lock.json b/package-lock.json index 08ac2ff..72a14cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1354,72 +1354,47 @@ "dev": true }, "adjust-sourcemap-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", - "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz", + "integrity": "sha512-958oaHHVEXMvsY7v7cC5gEkNIcoaAVIhZ4mBReYVZJOTP9IgKmzLjIOhTtzpLMu+qriXvLsVjJ155EeInp45IQ==", "dev": true, "requires": { - "assert": "1.4.1", - "camelcase": "5.0.0", - "loader-utils": "1.2.3", - "object-path": "0.11.4", - "regex-parser": "2.2.10" + "assert": "^1.3.0", + "camelcase": "^1.2.1", + "loader-utils": "^1.1.0", + "lodash.assign": "^4.0.1", + "lodash.defaults": "^3.1.2", + "object-path": "^0.9.2", + "regex-parser": "^2.2.9" }, "dependencies": { - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "dev": true }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "lodash.defaults": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", + "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", "dev": true, "requires": { - "inherits": "2.0.1" + "lodash.assign": "^3.0.0", + "lodash.restparam": "^3.0.0" + }, + "dependencies": { + "lodash.assign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "dev": true, + "requires": { + "lodash._baseassign": "^3.0.0", + "lodash._createassigner": "^3.0.0", + "lodash.keys": "^3.0.0" + } + } } } } @@ -1527,12 +1502,6 @@ "sprintf-js": "~1.0.2" } }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true - }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -1933,6 +1902,12 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, + "bootstrap": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.2.tgz", + "integrity": "sha512-vlGn0bcySYl/iV+BGA544JkkZP5LB3jsmkeKLFQakCOwCM3AOk7VkldBz4jrzSe+Z0Ezn99NVXa1o45cQY4R6A==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2494,15 +2469,6 @@ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "dev": true, - "requires": { - "arity-n": "^1.0.4" - } - }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -3029,15 +2995,11 @@ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true }, "debug": { "version": "3.1.0", @@ -3493,38 +3455,6 @@ "is-symbol": "^1.0.2" } }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "es6-templates": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", @@ -3801,23 +3731,6 @@ } } }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", - "dev": true - } - } - }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -5226,6 +5139,12 @@ } } }, + "jquery": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", + "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5428,12 +5347,98 @@ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._createassigner": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "dev": true, + "requires": { + "lodash._bindcallback": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash.restparam": "^3.0.0" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -5848,12 +5853,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -6060,9 +6059,9 @@ "dev": true }, "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", + "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", "dev": true }, "object-visit": { @@ -6449,6 +6448,12 @@ "find-up": "^3.0.0" } }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "dev": true + }, "portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", @@ -7409,9 +7414,9 @@ } }, "regex-parser": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", - "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, "regexp.prototype.flags": { @@ -7563,74 +7568,27 @@ "dev": true }, "resolve-url-loader": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", - "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "2.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-2.3.2.tgz", + "integrity": "sha512-sc/UVgiADdoTc+4cGPB7cUCnlEkzlxD1NXHw4oa9qA0fp30H8mAQ2ePJBP9MQ029DUuhEPouhNdvzT37pBCV0g==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^1.1.0", + "camelcase": "^4.1.0", + "convert-source-map": "^1.5.1", + "loader-utils": "^1.1.0", + "lodash.defaults": "^4.0.0", + "rework": "^1.0.1", + "rework-visit": "^1.0.0", + "source-map": "^0.5.7", + "urix": "^0.1.0" }, "dependencies": { - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -8828,12 +8786,6 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -9142,6 +9094,12 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "vue": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", + "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==", + "dev": true + }, "vue-hot-reload-api": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", @@ -9161,6 +9119,11 @@ "vue-style-loader": "^4.1.0" } }, + "vue-router": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.3.tgz", + "integrity": "sha512-BADg1mjGWX18Dpmy6bOGzGNnk7B/ZA0RxuA6qedY/YJwirMfKXIDzcccmHbQI0A6k5PzMdMloc0ElHfyOoX35A==" + }, "vue-style-loader": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz", @@ -9171,12 +9134,27 @@ "loader-utils": "^1.0.2" } }, + "vue-template-compiler": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, "vue-template-es2015-compiler": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", "dev": true }, + "vuex": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.5.1.tgz", + "integrity": "sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw==" + }, "watchpack": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", diff --git a/package.json b/package.json index 420218d..23bec00 100644 --- a/package.json +++ b/package.json @@ -11,11 +11,20 @@ }, "devDependencies": { "axios": "^0.19", + "bootstrap": "^4.0.0", "cross-env": "^7.0", + "jquery": "^3.2", "laravel-mix": "^5.0.1", "lodash": "^4.17.19", - "resolve-url-loader": "^3.1.0", - "sass": "^1.15.2", - "sass-loader": "^8.0.0" + "popper.js": "^1.12", + "resolve-url-loader": "^2.3.1", + "sass": "^1.20.1", + "sass-loader": "^8.0.0", + "vue": "^2.5.17", + "vue-template-compiler": "^2.6.10" + }, + "dependencies": { + "vue-router": "^3.4.3", + "vuex": "^3.5.1" } } diff --git a/resources/js/app.js b/resources/js/app.js index 40c55f6..fb3f073 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -1 +1,17 @@ + require('./bootstrap'); + +window.Vue = require('vue'); + +import VueRouter from "vue-router"; +import store from './store/store'; +import routes from "./routes"; + +Vue.component('products', require('./components/home/Products/Products').default); + +const app = new Vue({ + store, + el: '#app', + route: new VueRouter(routes) +}); + diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js index 6922577..63605fa 100644 --- a/resources/js/bootstrap.js +++ b/resources/js/bootstrap.js @@ -1,5 +1,18 @@ window._ = require('lodash'); +/** + * We'll load jQuery and the Bootstrap jQuery plugin which provides support + * for JavaScript based Bootstrap features such as modals and tabs. This + * code may be modified to fit the specific needs of your application. + */ + +try { + window.Popper = require('popper.js').default; + window.$ = window.jQuery = require('jquery'); + + require('bootstrap'); +} catch (e) {} + /** * We'll load the axios HTTP library which allows us to easily issue requests * to our Laravel back-end. This library automatically handles sending the diff --git a/resources/js/components/home/Products/Products.vue b/resources/js/components/home/Products/Products.vue new file mode 100644 index 0000000..1264984 --- /dev/null +++ b/resources/js/components/home/Products/Products.vue @@ -0,0 +1,46 @@ + + + diff --git a/resources/js/components/home/Products/buyProduct.vue b/resources/js/components/home/Products/buyProduct.vue new file mode 100644 index 0000000..340253f --- /dev/null +++ b/resources/js/components/home/Products/buyProduct.vue @@ -0,0 +1,44 @@ + + + diff --git a/resources/js/routes.js b/resources/js/routes.js new file mode 100644 index 0000000..409ce23 --- /dev/null +++ b/resources/js/routes.js @@ -0,0 +1,10 @@ +import products from "./store/modules/products"; +import buyProduct from "./components/home/Products/buyProduct"; + +export default { + mode: 'history', + route: [ + { path: '/', component: products }, + { path: '/buy/products/:slug', component: buyProduct } + ] +} diff --git a/resources/js/store/modules/products.js b/resources/js/store/modules/products.js new file mode 100644 index 0000000..8db8b3f --- /dev/null +++ b/resources/js/store/modules/products.js @@ -0,0 +1,31 @@ +export default { + state: { + items: [] + }, + + mutations: { + LOAD_PRODUCTS (state, products) { + state.items = products; + } + }, + + actions: { + loadProducts (context) { + axios.get('/products') + .then( + response => { + context.commit('LOAD_PRODUCTS', response.data.products) + } + ) + }, + + buyProduct(context, param){ + axios.get( '/products/{param}') + .then( + reponse => { + console.log(reponse) + } + ) + } + } +} diff --git a/resources/js/store/store.js b/resources/js/store/store.js new file mode 100644 index 0000000..c5e70d7 --- /dev/null +++ b/resources/js/store/store.js @@ -0,0 +1,11 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import products from "./modules/products"; + +Vue.use(Vuex); + +export default new Vuex.Store({ + modules: { + products, + } +}) diff --git a/resources/sass/_variables.scss b/resources/sass/_variables.scss new file mode 100644 index 0000000..0407ab5 --- /dev/null +++ b/resources/sass/_variables.scss @@ -0,0 +1,19 @@ +// Body +$body-bg: #f8fafc; + +// Typography +$font-family-sans-serif: 'Nunito', sans-serif; +$font-size-base: 0.9rem; +$line-height-base: 1.6; + +// Colors +$blue: #3490dc; +$indigo: #6574cd; +$purple: #9561e2; +$pink: #f66d9b; +$red: #e3342f; +$orange: #f6993f; +$yellow: #ffed4a; +$green: #38c172; +$teal: #4dc0b5; +$cyan: #6cb2eb; diff --git a/resources/sass/app.scss b/resources/sass/app.scss index 8337712..cee89de 100644 --- a/resources/sass/app.scss +++ b/resources/sass/app.scss @@ -1 +1,33 @@ -// +// Fonts +@import url('https://fonts.googleapis.com/css?family=Nunito'); + +// Variables +@import 'variables'; + +// Bootstrap +@import '~bootstrap/scss/bootstrap'; + +.price{ + font-size: 30px; + margin: 0 auto; + color: #333; +} +.right{ + float:right; + border-bottom: 2px solid #4B8E4B; +} +.thumbnail{ + opacity:0.70; + -webkit-transition: all 0.5s; + transition: all 0.5s; +} +.thumbnail:hover{ + opacity:1.00; + box-shadow: 0px 0px 10px #4bc6ff; +} +@media screen and (max-width: 770px) { + .right{ + float:left; + width: 100%; + } +} diff --git a/routes/web.php b/routes/web.php index 48f383b..3641c56 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,9 +12,25 @@ | contains the "web" middleware group. Now create something great! | */ +Auth::routes(['verify' => true]); -Route::get('/', function () { - return view('welcome'); +Route::get('/', 'HomeController@index')->name('home'); +Route::get('/products', 'ProductsController@index')->name('products'); + +// ROTAS CLIENTE +Route::group(['namespace' => 'Client', ], function() +{ + // ÁREA PROTEGIDA + Route::group(['prefix' => 'cliente', 'as' => 'client.', 'middleware' => 'auth:client'], function () { + Route::get('/', 'ClientController@index')->name('dash'); + }); }); -Route::get('/checkout/{product:slug}', 'CheckoutController@index'); +// ROTAS VENDEDOR +Route::group(['namespace' => 'Vendor', 'prefix' => 'vendedor', 'as' => 'vendor.'], function() +{ + // ÁREA PROTEGIDA + Route::group(['middleware' => 'auth:vendor'], function () { + Route::get('/', 'VendorController@index')->name('dash'); + }); +});