├── public
├── favicon.ico
├── robots.txt
├── mix-manifest.json
├── .htaccess
└── index.php
├── database
├── .gitignore
├── seeders
│ └── DatabaseSeeder.php
├── migrations
│ ├── 2022_03_28_204252_create_stocks_table.php
│ ├── 2022_04_01_200330_create_carts_table.php
│ ├── 2022_06_12_184200_add_payment_intent_id_to_carts_table.php
│ ├── 2022_05_18_195907_create_shipping_types_table.php
│ ├── 2022_05_14_203358_create_category_product_table.php
│ ├── 2022_03_19_210350_create_categories_table.php
│ ├── 2022_05_26_205236_create_order_variation_table.php
│ ├── 2022_04_01_200518_create_cart_variation_table.php
│ ├── 2022_05_20_210222_create_shipping_addresses_table.php
│ ├── 2022_03_21_203403_create_products_table.php
│ ├── 2014_10_12_100000_create_password_resets_table.php
│ ├── 2022_03_23_191747_create_variations_table.php
│ ├── 2014_10_12_000000_create_users_table.php
│ ├── 2019_08_19_000000_create_failed_jobs_table.php
│ ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│ ├── 2022_05_26_190028_create_orders_table.php
│ └── 2022_03_30_235857_create_media_table.php
└── factories
│ └── UserFactory.php
├── bootstrap
├── cache
│ └── .gitignore
└── app.php
├── storage
├── logs
│ └── .gitignore
├── app
│ ├── public
│ │ └── .gitignore
│ └── .gitignore
├── debugbar
│ └── .gitignore
└── framework
│ ├── testing
│ └── .gitignore
│ ├── views
│ └── .gitignore
│ ├── cache
│ ├── data
│ │ └── .gitignore
│ └── .gitignore
│ ├── sessions
│ └── .gitignore
│ └── .gitignore
├── nike-air-force-1-black.png
├── nike-air-force-1-white.png
├── config
├── cart.php
├── stripe.php
├── cors.php
├── services.php
├── view.php
├── hashing.php
├── broadcasting.php
├── sanctum.php
├── filesystems.php
├── queue.php
├── cache.php
├── logging.php
├── mail.php
├── auth.php
├── scout.php
└── database.php
├── app
├── Cart
│ ├── Contracts
│ │ └── CartInterface.php
│ ├── Exceptions
│ │ └── QuantityNoLongerAvailableException.php
│ └── Cart.php
├── Models
│ ├── Stock.php
│ ├── ShippingType.php
│ ├── Scopes
│ │ └── LiveScope.php
│ ├── Category.php
│ ├── ShippingAddress.php
│ ├── Presenters
│ │ └── OrderPresenter.php
│ ├── Cart.php
│ ├── User.php
│ ├── Variation.php
│ ├── Product.php
│ └── Order.php
├── Http
│ ├── Controllers
│ │ ├── CategoryShowController.php
│ │ ├── OrderConfirmationIndexController.php
│ │ ├── HomeController.php
│ │ ├── ProductShowController.php
│ │ ├── Controller.php
│ │ ├── OrderIndexController.php
│ │ ├── CartIndexController.php
│ │ ├── Auth
│ │ │ ├── EmailVerificationPromptController.php
│ │ │ ├── EmailVerificationNotificationController.php
│ │ │ ├── VerifyEmailController.php
│ │ │ ├── ConfirmablePasswordController.php
│ │ │ ├── PasswordResetLinkController.php
│ │ │ ├── AuthenticatedSessionController.php
│ │ │ ├── RegisteredUserController.php
│ │ │ └── NewPasswordController.php
│ │ └── CheckoutIndexController.php
│ ├── Middleware
│ │ ├── EncryptCookies.php
│ │ ├── VerifyCsrfToken.php
│ │ ├── PreventRequestsDuringMaintenance.php
│ │ ├── TrustHosts.php
│ │ ├── TrimStrings.php
│ │ ├── Authenticate.php
│ │ ├── CartMiddleware.php
│ │ ├── RedirectIfCartEmptyMiddleware.php
│ │ ├── TrustProxies.php
│ │ └── RedirectIfAuthenticated.php
│ ├── Livewire
│ │ ├── Cart.php
│ │ ├── ProductGallery.php
│ │ ├── Navigation.php
│ │ ├── ProductDropdown.php
│ │ ├── CartItem.php
│ │ ├── ProductSelector.php
│ │ └── ProductBrowser.php
│ ├── Requests
│ │ └── Auth
│ │ │ └── LoginRequest.php
│ └── Kernel.php
├── View
│ └── Components
│ │ ├── AppLayout.php
│ │ └── GuestLayout.php
├── Mail
│ ├── OrderCreatedMail.php
│ └── OrderStatusUpdatedMail.php
├── Providers
│ ├── StripeServiceProvider.php
│ ├── BroadcastServiceProvider.php
│ ├── CartServiceProvider.php
│ ├── AuthServiceProvider.php
│ ├── AppServiceProvider.php
│ ├── EventServiceProvider.php
│ └── RouteServiceProvider.php
├── Listeners
│ └── AttachOrdersListener.php
├── Console
│ └── Kernel.php
├── Observers
│ └── OrderObserver.php
└── Exceptions
│ └── Handler.php
├── resources
├── js
│ ├── app.js
│ └── bootstrap.js
├── css
│ └── app.css
├── views
│ ├── components
│ │ ├── label.blade.php
│ │ ├── auth-session-status.blade.php
│ │ ├── select.blade.php
│ │ ├── dropdown-link.blade.php
│ │ ├── input.blade.php
│ │ ├── category.blade.php
│ │ ├── auth-card.blade.php
│ │ ├── button-anchor.blade.php
│ │ ├── button.blade.php
│ │ ├── auth-validation-errors.blade.php
│ │ ├── nav-link.blade.php
│ │ ├── responsive-nav-link.blade.php
│ │ ├── notification.blade.php
│ │ ├── dropdown.blade.php
│ │ └── application-logo.blade.php
│ ├── emails
│ │ ├── order-created.blade.php
│ │ └── order-status-updated.blade.php
│ ├── cart
│ │ └── index.blade.php
│ ├── checkout.blade.php
│ ├── livewire
│ │ ├── product-gallery.blade.php
│ │ ├── product-selector.blade.php
│ │ ├── product-dropdown.blade.php
│ │ ├── cart.blade.php
│ │ ├── cart-item.blade.php
│ │ └── product-browser.blade.php
│ ├── home.blade.php
│ ├── dashboard.blade.php
│ ├── categories
│ │ └── show.blade.php
│ ├── orders
│ │ ├── confirmation.blade.php
│ │ └── index.blade.php
│ ├── layouts
│ │ ├── guest.blade.php
│ │ └── app.blade.php
│ ├── products
│ │ └── show.blade.php
│ └── auth
│ │ ├── confirm-password.blade.php
│ │ ├── forgot-password.blade.php
│ │ ├── verify-email.blade.php
│ │ ├── reset-password.blade.php
│ │ ├── register.blade.php
│ │ └── login.blade.php
└── lang
│ └── en
│ ├── pagination.php
│ ├── auth.php
│ └── passwords.php
├── .gitattributes
├── tests
├── TestCase.php
├── Unit
│ └── ExampleTest.php
├── Feature
│ ├── ExampleTest.php
│ └── Auth
│ │ ├── RegistrationTest.php
│ │ ├── AuthenticationTest.php
│ │ ├── PasswordConfirmationTest.php
│ │ ├── EmailVerificationTest.php
│ │ └── PasswordResetTest.php
└── CreatesApplication.php
├── .styleci.yml
├── .gitignore
├── .editorconfig
├── tailwind.config.js
├── routes
├── channels.php
├── api.php
├── console.php
├── web.php
└── auth.php
├── server.php
├── webpack.mix.js
├── package.json
├── .env.example
├── phpunit.xml
├── artisan
├── composer.json
└── README.md
/public/favicon.ico:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite*
2 |
--------------------------------------------------------------------------------
/bootstrap/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/storage/app/public/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/debugbar/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/framework/testing/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/cache/data/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !data/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/public/mix-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "/js/app.js": "/js/app.js",
3 | "/css/app.css": "/css/app.css"
4 | }
5 |
--------------------------------------------------------------------------------
/nike-air-force-1-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/turiondolby/laravel-ecommerce/HEAD/nike-air-force-1-black.png
--------------------------------------------------------------------------------
/nike-air-force-1-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/turiondolby/laravel-ecommerce/HEAD/nike-air-force-1-white.png
--------------------------------------------------------------------------------
/config/cart.php:
--------------------------------------------------------------------------------
1 | [
5 | 'key' => 'cart_session',
6 | ]
7 | ];
8 |
--------------------------------------------------------------------------------
/config/stripe.php:
--------------------------------------------------------------------------------
1 | env('STRIPE_KEY'),
5 | 'secret' => env('STRIPE_SECRET'),
6 | ];
7 |
--------------------------------------------------------------------------------
/app/Cart/Contracts/CartInterface.php:
--------------------------------------------------------------------------------
1 | merge(['class' => 'block font-medium text-sm text-gray-700']) }}>
4 | {{ $value ?? $slot }}
5 |
6 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 |
3 | *.blade.php diff=html
4 | *.css diff=css
5 | *.html diff=html
6 | *.md diff=markdown
7 | *.php diff=php
8 |
9 | /.github export-ignore
10 | CHANGELOG.md export-ignore
11 |
--------------------------------------------------------------------------------
/app/Cart/Exceptions/QuantityNoLongerAvailableException.php:
--------------------------------------------------------------------------------
1 | merge(['class' => 'font-medium text-sm text-green-600']) }}>
5 | {{ $status }}
6 |
7 | @endif
8 |
--------------------------------------------------------------------------------
/resources/views/components/select.blade.php:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/views/components/dropdown-link.blade.php:
--------------------------------------------------------------------------------
1 | merge(['class' => 'block px-4 py-2 text-sm leading-5 text-gray-700 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition duration-150 ease-in-out']) }}>{{ $slot }}
2 |
--------------------------------------------------------------------------------
/.styleci.yml:
--------------------------------------------------------------------------------
1 | php:
2 | preset: laravel
3 | version: 8
4 | disabled:
5 | - no_unused_imports
6 | finder:
7 | not-name:
8 | - index.php
9 | - server.php
10 | js:
11 | finder:
12 | not-name:
13 | - webpack.mix.js
14 | css: true
15 |
--------------------------------------------------------------------------------
/resources/views/components/input.blade.php:
--------------------------------------------------------------------------------
1 | @props(['disabled' => false])
2 |
3 | merge(['class' => 'rounded-md shadow-sm border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50']) !!}>
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /public/hot
3 | /public/storage
4 | /storage/*.key
5 | /vendor
6 | .env
7 | .env.backup
8 | .phpunit.result.cache
9 | docker-compose.override.yml
10 | Homestead.json
11 | Homestead.yaml
12 | npm-debug.log
13 | yarn-error.log
14 | /.idea
15 | /.vscode
16 |
--------------------------------------------------------------------------------
/app/Models/Stock.php:
--------------------------------------------------------------------------------
1 |
2 | {{ $category->title }}
3 |
4 | @foreach($category->children as $child)
5 |
11 | {{ config('app.name') }}
12 | @endcomponent
13 |
--------------------------------------------------------------------------------
/resources/views/emails/order-status-updated.blade.php:
--------------------------------------------------------------------------------
1 | @component('mail::message')
2 | # The status of your order (#{{ $order->id }}) has changed.
3 |
4 | The body of your message.
5 |
6 | @component('mail::button', ['url' => ''])
7 | Button Text
8 | @endcomponent
9 |
10 | Thanks,
11 | {{ config('app.name') }}
12 | @endcomponent
13 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | indent_style = space
8 | indent_size = 4
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | trim_trailing_whitespace = false
13 |
14 | [*.{yml,yaml}]
15 | indent_size = 2
16 |
17 | [docker-compose.yml]
18 | indent_size = 4
19 |
--------------------------------------------------------------------------------
/resources/views/components/auth-card.blade.php:
--------------------------------------------------------------------------------
1 |
16 | {{ $product->description }} 17 |
18 |