@fleetbase/storefront-engine 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.php-cs-fixer.php +29 -0
- package/LICENSE.md +16 -4
- package/README.md +106 -13
- package/composer.json +88 -0
- package/extension.json +10 -0
- package/package.json +6 -6
- package/phpstan.neon.dist +8 -0
- package/phpunit.xml.dist +16 -0
- package/server/.gitattributes +14 -0
- package/server/README.md +40 -0
- package/server/config/api.php +101 -0
- package/server/config/database.connections.php +57 -0
- package/server/config/storefront.php +19 -0
- package/server/config/twilio-notification-channel.php +36 -0
- package/server/migrations/2023_05_03_025307_create_carts_table.php +44 -0
- package/server/migrations/2023_05_03_025307_create_checkouts_table.php +51 -0
- package/server/migrations/2023_05_03_025307_create_gateways_table.php +48 -0
- package/server/migrations/2023_05_03_025307_create_network_stores_table.php +36 -0
- package/server/migrations/2023_05_03_025307_create_networks_table.php +56 -0
- package/server/migrations/2023_05_03_025307_create_notification_channels_table.php +43 -0
- package/server/migrations/2023_05_03_025307_create_payment_methods_table.php +44 -0
- package/server/migrations/2023_05_03_025307_create_product_addon_categories_table.php +38 -0
- package/server/migrations/2023_05_03_025307_create_product_addons_table.php +43 -0
- package/server/migrations/2023_05_03_025307_create_product_hours_table.php +37 -0
- package/server/migrations/2023_05_03_025307_create_product_store_locations_table.php +34 -0
- package/server/migrations/2023_05_03_025307_create_product_variant_options_table.php +40 -0
- package/server/migrations/2023_05_03_025307_create_product_variants_table.php +44 -0
- package/server/migrations/2023_05_03_025307_create_products_table.php +59 -0
- package/server/migrations/2023_05_03_025307_create_reviews_table.php +41 -0
- package/server/migrations/2023_05_03_025307_create_store_hours_table.php +37 -0
- package/server/migrations/2023_05_03_025307_create_store_locations_table.php +38 -0
- package/server/migrations/2023_05_03_025307_create_stores_table.php +57 -0
- package/server/migrations/2023_05_03_025307_create_votes_table.php +39 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_carts_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_checkouts_table.php +48 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_gateways_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_network_stores_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_networks_table.php +42 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_notification_channels_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_payment_methods_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_addon_categories_table.php +38 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_addons_table.php +38 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_hours_table.php +32 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_store_locations_table.php +34 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_variant_options_table.php +32 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_variants_table.php +32 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_products_table.php +44 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_reviews_table.php +38 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_store_hours_table.php +32 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_store_locations_table.php +40 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_stores_table.php +42 -0
- package/server/migrations/2023_05_03_025310_add_foreign_keys_to_votes_table.php +38 -0
- package/server/src/Auth/Schemas/Storefront.php +95 -0
- package/server/src/Console/Commands/NotifyStorefrontOrderNearby.php +86 -0
- package/server/src/Expansions/EntityExpansion.php +44 -0
- package/server/src/Http/Controllers/ActionController.php +119 -0
- package/server/src/Http/Controllers/AddonCategoryController.php +13 -0
- package/server/src/Http/Controllers/CustomerController.php +13 -0
- package/server/src/Http/Controllers/GatewayController.php +13 -0
- package/server/src/Http/Controllers/MetricsController.php +71 -0
- package/server/src/Http/Controllers/NetworkController.php +170 -0
- package/server/src/Http/Controllers/NotificationChannelController.php +13 -0
- package/server/src/Http/Controllers/OrderController.php +154 -0
- package/server/src/Http/Controllers/ProductAddonCategoryController.php +14 -0
- package/server/src/Http/Controllers/ProductAddonController.php +14 -0
- package/server/src/Http/Controllers/ProductController.php +123 -0
- package/server/src/Http/Controllers/ProductHourController.php +13 -0
- package/server/src/Http/Controllers/ProductVariantController.php +13 -0
- package/server/src/Http/Controllers/ProductVariantOptionController.php +13 -0
- package/server/src/Http/Controllers/ReviewController.php +13 -0
- package/server/src/Http/Controllers/StoreController.php +26 -0
- package/server/src/Http/Controllers/StoreHourController.php +13 -0
- package/server/src/Http/Controllers/StoreLocationController.php +13 -0
- package/server/src/Http/Controllers/StorefrontController.php +15 -0
- package/server/src/Http/Controllers/VoteController.php +13 -0
- package/server/src/Http/Controllers/v1/CartController.php +161 -0
- package/server/src/Http/Controllers/v1/CategoryController.php +138 -0
- package/server/src/Http/Controllers/v1/CheckoutController.php +957 -0
- package/server/src/Http/Controllers/v1/CustomerController.php +482 -0
- package/server/src/Http/Controllers/v1/GatewayControllerController.php +11 -0
- package/server/src/Http/Controllers/v1/NetworkController.php +281 -0
- package/server/src/Http/Controllers/v1/PaymentMethodController.php +11 -0
- package/server/src/Http/Controllers/v1/ProductController.php +94 -0
- package/server/src/Http/Controllers/v1/ReviewController.php +270 -0
- package/server/src/Http/Controllers/v1/ServiceQuoteController.php +402 -0
- package/server/src/Http/Controllers/v1/StoreController.php +176 -0
- package/server/src/Http/Filter/AddonCategoryFilter.php +19 -0
- package/server/src/Http/Filter/CustomerFilter.php +18 -0
- package/server/src/Http/Filter/GatewayFilter.php +13 -0
- package/server/src/Http/Filter/NetworkFilter.php +18 -0
- package/server/src/Http/Filter/NotificationChannelFilter.php +13 -0
- package/server/src/Http/Filter/OrderFilter.php +46 -0
- package/server/src/Http/Filter/ProductFilter.php +28 -0
- package/server/src/Http/Filter/StoreFilter.php +42 -0
- package/server/src/Http/Filter/StoreLocationFilter.php +23 -0
- package/server/src/Http/Middleware/SetStorefrontSession.php +130 -0
- package/server/src/Http/Requests/AddStoreToNetworkCategory.php +45 -0
- package/server/src/Http/Requests/CaptureOrderRequest.php +30 -0
- package/server/src/Http/Requests/CreateCustomerRequest.php +44 -0
- package/server/src/Http/Requests/CreateReviewRequest.php +34 -0
- package/server/src/Http/Requests/GetServiceQuoteFromCart.php +40 -0
- package/server/src/Http/Requests/InitializeCheckoutRequest.php +38 -0
- package/server/src/Http/Requests/NetworkActionRequest.php +43 -0
- package/server/src/Http/Requests/VerifyCreateCustomerRequest.php +31 -0
- package/server/src/Http/Resources/Cart.php +31 -0
- package/server/src/Http/Resources/Category.php +48 -0
- package/server/src/Http/Resources/Customer.php +36 -0
- package/server/src/Http/Resources/Gateway.php +32 -0
- package/server/src/Http/Resources/Media.php +29 -0
- package/server/src/Http/Resources/Network.php +48 -0
- package/server/src/Http/Resources/Product.php +209 -0
- package/server/src/Http/Resources/Review.php +45 -0
- package/server/src/Http/Resources/ReviewCustomer.php +60 -0
- package/server/src/Http/Resources/Store.php +76 -0
- package/server/src/Http/Resources/StoreHour.php +29 -0
- package/server/src/Http/Resources/StoreLocation.php +33 -0
- package/server/src/Imports/ProductsImport.php +20 -0
- package/server/src/Jobs/DownloadProductImageUrl.php +60 -0
- package/server/src/Listeners/HandleOrderCompleted.php +31 -0
- package/server/src/Listeners/HandleOrderDispatched.php +34 -0
- package/server/src/Listeners/HandleOrderDriverAssigned.php +37 -0
- package/server/src/Listeners/HandleOrderStarted.php +27 -0
- package/server/src/Mail/StorefrontNetworkInvite.php +48 -0
- package/server/src/Models/AddonCategory.php +30 -0
- package/server/src/Models/Cart.php +691 -0
- package/server/src/Models/Checkout.php +166 -0
- package/server/src/Models/Customer.php +88 -0
- package/server/src/Models/Gateway.php +165 -0
- package/server/src/Models/Network.php +300 -0
- package/server/src/Models/NetworkStore.php +86 -0
- package/server/src/Models/NotificationChannel.php +147 -0
- package/server/src/Models/PaymentMethod.php +99 -0
- package/server/src/Models/Product.php +315 -0
- package/server/src/Models/ProductAddon.php +128 -0
- package/server/src/Models/ProductAddonCategory.php +90 -0
- package/server/src/Models/ProductHour.php +59 -0
- package/server/src/Models/ProductStoreLocation.php +77 -0
- package/server/src/Models/ProductVariant.php +125 -0
- package/server/src/Models/ProductVariantOption.php +86 -0
- package/server/src/Models/Review.php +127 -0
- package/server/src/Models/Store.php +478 -0
- package/server/src/Models/StoreHour.php +59 -0
- package/server/src/Models/StoreLocation.php +126 -0
- package/server/src/Models/StorefrontModel.php +22 -0
- package/server/src/Models/Vote.php +84 -0
- package/server/src/Notifications/StorefrontOrderCanceled.php +196 -0
- package/server/src/Notifications/StorefrontOrderCompleted.php +201 -0
- package/server/src/Notifications/StorefrontOrderCreated.php +157 -0
- package/server/src/Notifications/StorefrontOrderDriverAssigned.php +200 -0
- package/server/src/Notifications/StorefrontOrderEnroute.php +199 -0
- package/server/src/Notifications/StorefrontOrderNearby.php +201 -0
- package/server/src/Notifications/StorefrontOrderPreparing.php +202 -0
- package/server/src/Notifications/StorefrontOrderReadyForPickup.php +202 -0
- package/server/src/Observers/NetworkObserver.php +40 -0
- package/server/src/Observers/ProductObserver.php +118 -0
- package/server/src/Providers/EventServiceProvider.php +23 -0
- package/server/src/Providers/StorefrontServiceProvider.php +103 -0
- package/server/src/Support/Metrics.php +193 -0
- package/server/src/Support/OrderConfig.php +13 -0
- package/server/src/Support/QPay.php +208 -0
- package/server/src/Support/Storefront.php +201 -0
- package/server/src/routes.php +180 -0
- package/server/tests/Feature.php +5 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
$finder = PhpCsFixer\Finder::create()
|
|
4
|
+
->in(__DIR__ . DIRECTORY_SEPARATOR . 'server' . DIRECTORY_SEPARATOR . 'tests')
|
|
5
|
+
->in(__DIR__ . DIRECTORY_SEPARATOR . 'server' . DIRECTORY_SEPARATOR . 'src')
|
|
6
|
+
->append(['.php-cs-fixer.php']);
|
|
7
|
+
|
|
8
|
+
$rules = [
|
|
9
|
+
'@Symfony' => true,
|
|
10
|
+
'phpdoc_no_empty_return' => false,
|
|
11
|
+
'array_syntax' => ['syntax' => 'short'],
|
|
12
|
+
'yoda_style' => false,
|
|
13
|
+
'binary_operator_spaces' => [
|
|
14
|
+
'operators' => [
|
|
15
|
+
'=>' => 'align',
|
|
16
|
+
'=' => 'align',
|
|
17
|
+
],
|
|
18
|
+
],
|
|
19
|
+
'concat_space' => ['spacing' => 'one'],
|
|
20
|
+
'not_operator_with_space' => false,
|
|
21
|
+
'increment_style' => ['style' => 'post'],
|
|
22
|
+
'indentation_type' => true,
|
|
23
|
+
'single_quote' => true,
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
return (new PhpCsFixer\Config())
|
|
27
|
+
->setUsingCache(true)
|
|
28
|
+
->setRules($rules)
|
|
29
|
+
->setFinder($finder);
|
package/LICENSE.md
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2023 Fleetbase
|
|
4
4
|
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
6
11
|
|
|
7
|
-
The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
8
14
|
|
|
9
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,32 +1,125 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<p align="center">
|
|
3
|
+
<img src="https://camo.githubusercontent.com/870812d4ebe999bd1434db7ffcb27c2f347f1c2c6af1842e59ae8b28855b4b42/68747470733a2f2f666c622d6173736574732e73332e61702d736f757468656173742d312e616d617a6f6e6177732e636f6d2f7374617469632f73746f726566726f6e742d6c6f676f2e737667" width="380" height="100" />
|
|
4
|
+
</p>
|
|
5
|
+
<p align="center">
|
|
6
|
+
Open-source Headless Commerce & Marketplace Extension for Fleetbase
|
|
7
|
+
</p>
|
|
8
|
+
</p>
|
|
2
9
|
|
|
3
|
-
|
|
10
|
+
---
|
|
4
11
|
|
|
12
|
+
## Overview
|
|
5
13
|
|
|
6
|
-
|
|
14
|
+
This monorepo contains both the frontend and backend components of the Storefront extension for Fleetbase. The frontend is built using Ember.js and the backend is implemented in PHP.
|
|
7
15
|
|
|
8
|
-
|
|
9
|
-
* Ember CLI v3.24 or above
|
|
10
|
-
* Node.js v14 or above
|
|
16
|
+
### Requirements
|
|
11
17
|
|
|
18
|
+
- PHP 7.3.0 or above
|
|
19
|
+
- Ember.js v3.24 or above
|
|
20
|
+
- Ember CLI v3.24 or above
|
|
21
|
+
- Node.js v14 or above
|
|
12
22
|
|
|
13
|
-
##
|
|
23
|
+
## Structure
|
|
14
24
|
|
|
15
25
|
```
|
|
16
|
-
|
|
26
|
+
├── addon
|
|
27
|
+
├── app
|
|
28
|
+
├── assets
|
|
29
|
+
├── translations
|
|
30
|
+
├── config
|
|
31
|
+
├── node_modules
|
|
32
|
+
├── server
|
|
33
|
+
│ ├── config
|
|
34
|
+
│ ├── data
|
|
35
|
+
│ ├── migrations
|
|
36
|
+
│ ├── resources
|
|
37
|
+
│ ├── src
|
|
38
|
+
│ ├── tests
|
|
39
|
+
│ └── vendor
|
|
40
|
+
├── tests
|
|
41
|
+
├── testem.js
|
|
42
|
+
├── index.js
|
|
43
|
+
├── package.json
|
|
44
|
+
├── phpstan.neon.dist
|
|
45
|
+
├── phpunit.xml.dist
|
|
46
|
+
├── pnpm-lock.yaml
|
|
47
|
+
├── ember-cli-build.js
|
|
48
|
+
├── composer.json
|
|
49
|
+
├── CONTRIBUTING.md
|
|
50
|
+
├── LICENSE.md
|
|
51
|
+
├── README.md
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Installation
|
|
55
|
+
|
|
56
|
+
### Backend
|
|
57
|
+
|
|
58
|
+
Install the PHP packages using Composer:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
composer require fleetbase/core-api
|
|
62
|
+
composer require fleetbase/fleetops-api
|
|
63
|
+
composer require fleetbase/storefront-api
|
|
17
64
|
```
|
|
65
|
+
### Frontend
|
|
18
66
|
|
|
67
|
+
Install the Ember.js Engine/Addon:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
pnpm install @fleetbase/storefront-engine
|
|
71
|
+
```
|
|
19
72
|
|
|
20
73
|
## Usage
|
|
21
74
|
|
|
22
|
-
|
|
75
|
+
### Backend
|
|
76
|
+
|
|
77
|
+
🧹 Keep a modern codebase with **PHP CS Fixer**:
|
|
78
|
+
```bash
|
|
79
|
+
composer lint
|
|
80
|
+
```
|
|
23
81
|
|
|
82
|
+
⚗️ Run static analysis using **PHPStan**:
|
|
83
|
+
```bash
|
|
84
|
+
composer test:types
|
|
85
|
+
```
|
|
24
86
|
|
|
25
|
-
|
|
87
|
+
✅ Run unit tests using **PEST**
|
|
88
|
+
```bash
|
|
89
|
+
composer test:unit
|
|
90
|
+
```
|
|
26
91
|
|
|
27
|
-
|
|
92
|
+
🚀 Run the entire test suite:
|
|
93
|
+
```bash
|
|
94
|
+
composer test
|
|
95
|
+
```
|
|
28
96
|
|
|
97
|
+
### Frontend
|
|
29
98
|
|
|
30
|
-
|
|
99
|
+
🧹 Keep a modern codebase with **ESLint**:
|
|
100
|
+
```bash
|
|
101
|
+
pnpm lint
|
|
102
|
+
```
|
|
31
103
|
|
|
32
|
-
|
|
104
|
+
✅ Run unit tests using **Ember/QUnit**
|
|
105
|
+
```bash
|
|
106
|
+
pnpm test
|
|
107
|
+
pnpm test:ember
|
|
108
|
+
pnpm test:ember-compatibility
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
🚀 Start the Ember Addon/Engine
|
|
112
|
+
```bash
|
|
113
|
+
pnpm start
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
🔨 Build the Ember Addon/Engine
|
|
117
|
+
```bash
|
|
118
|
+
pnpm build
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Contributing
|
|
122
|
+
See the Contributing Guide for details on how to contribute to this project.
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
This project is licensed under the MIT License.
|
package/composer.json
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "fleetbase/storefront-api",
|
|
3
|
+
"version": "0.1.9",
|
|
4
|
+
"description": "Headless Commerce & Marketplace Extension for Fleetbase",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"fleetbase-extension",
|
|
7
|
+
"storefront",
|
|
8
|
+
"headless commerce",
|
|
9
|
+
"marketplace",
|
|
10
|
+
"e-commerce"
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"authors": [
|
|
14
|
+
{
|
|
15
|
+
"name": "Fleetbase Pte Ltd.",
|
|
16
|
+
"email": "hello@fleetbase.io"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "Ronald A. Richardson",
|
|
20
|
+
"email": "ron@fleetbase.io"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"require": {
|
|
24
|
+
"php": "^7.4|^8.0",
|
|
25
|
+
"fleetbase/core-api": "^1.2.6",
|
|
26
|
+
"fleetbase/fleetops-api": "^0.2.7",
|
|
27
|
+
"geocoder-php/google-maps-places-provider": "^1.4",
|
|
28
|
+
"laravel-notification-channels/apn": "^3.8",
|
|
29
|
+
"laravel-notification-channels/fcm": "^2.7",
|
|
30
|
+
"laravel-notification-channels/twilio": "^3.3",
|
|
31
|
+
"milon/barcode": "^9.0",
|
|
32
|
+
"php-http/guzzle7-adapter": "^1.0",
|
|
33
|
+
"psr/http-factory-implementation": "*",
|
|
34
|
+
"toin0u/geocoder-laravel": "^4.4"
|
|
35
|
+
},
|
|
36
|
+
"require-dev": {
|
|
37
|
+
"friendsofphp/php-cs-fixer": "^3.34.1",
|
|
38
|
+
"nunomaduro/collision": "^5.11.0|^6.4.0",
|
|
39
|
+
"pestphp/pest": "^1.22.6",
|
|
40
|
+
"phpstan/phpstan": "^1.10.38",
|
|
41
|
+
"symfony/var-dumper": "^5.4.29"
|
|
42
|
+
},
|
|
43
|
+
"autoload": {
|
|
44
|
+
"psr-4": {
|
|
45
|
+
"Fleetbase\\Storefront\\": "src/"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"autoload-dev": {
|
|
49
|
+
"psr-4": {
|
|
50
|
+
"Fleetbase\\Storefront\\Tests\\": "tests/"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"minimum-stability": "dev",
|
|
54
|
+
"prefer-stable": true,
|
|
55
|
+
"extra": {
|
|
56
|
+
"laravel": {
|
|
57
|
+
"providers": [
|
|
58
|
+
"Fleetbase\\Storefront\\Providers\\StorefrontServiceProvider",
|
|
59
|
+
"Fleetbase\\Storefront\\Providers\\EventServiceProvider"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"fleetbase": {
|
|
63
|
+
"create-database": "storefront",
|
|
64
|
+
"order-config": "Fleetbase\\Storefront\\Support\\OrderConfig",
|
|
65
|
+
"sandbox-migrations": false
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"config": {
|
|
69
|
+
"vendor-dir": "./server_vendor",
|
|
70
|
+
"sort-packages": true,
|
|
71
|
+
"preferred-install": "dist",
|
|
72
|
+
"allow-plugins": {
|
|
73
|
+
"pestphp/pest-plugin": true,
|
|
74
|
+
"php-http/discovery": true
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"scripts": {
|
|
78
|
+
"lint": "php-cs-fixer fix -v",
|
|
79
|
+
"test:lint": "php-cs-fixer fix -v --dry-run",
|
|
80
|
+
"test:types": "phpstan analyse --ansi --memory-limit=0",
|
|
81
|
+
"test:unit": "pest --colors=always",
|
|
82
|
+
"test": [
|
|
83
|
+
"@test:lint",
|
|
84
|
+
"@test:types",
|
|
85
|
+
"@test:unit"
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
}
|
package/extension.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Storefront",
|
|
3
|
+
"version": "0.1.9",
|
|
4
|
+
"description": "Headless Commerce & Marketplace Extension for Fleetbase",
|
|
5
|
+
"repository": "https://github.com/fleetbase/storefront",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Fleetbase Pte Ltd <hello@fleetbase.io>",
|
|
8
|
+
"engine": "package.json",
|
|
9
|
+
"api": "composer.json"
|
|
10
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fleetbase/storefront-engine",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.9",
|
|
4
|
+
"description": "Headless Commerce & Marketplace Extension for Fleetbase",
|
|
5
5
|
"fleetbase": {
|
|
6
6
|
"route": "storefront",
|
|
7
7
|
"dashboard": "storefront/int/v1/dashboard"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"ember-engine",
|
|
17
17
|
"ember-addon"
|
|
18
18
|
],
|
|
19
|
-
"repository": "https://github.com/fleetbase/storefront
|
|
19
|
+
"repository": "https://github.com/fleetbase/storefront",
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"author": "Fleetbase Pte Ltd <hello@fleetbase.io>",
|
|
22
22
|
"directories": {
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
"publish:github": "npm config set '@fleetbase:registry' https://npm.pkg.github.com/ && npm publish"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@fleetbase/ember-core": "^0.1.
|
|
44
|
-
"@fleetbase/ember-ui": "^0.1.
|
|
45
|
-
"@fleetbase/fleetops-data": "^0.0
|
|
43
|
+
"@fleetbase/ember-core": "^0.1.3",
|
|
44
|
+
"@fleetbase/ember-ui": "^0.1.9",
|
|
45
|
+
"@fleetbase/fleetops-data": "^0.1.0",
|
|
46
46
|
"@fortawesome/ember-fontawesome": "^0.4.1",
|
|
47
47
|
"@fortawesome/fontawesome-svg-core": "^6.4.0",
|
|
48
48
|
"@fortawesome/free-solid-svg-icons": "^6.4.0",
|
package/phpunit.xml.dist
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
3
|
+
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
|
|
4
|
+
colors="true"
|
|
5
|
+
>
|
|
6
|
+
<testsuites>
|
|
7
|
+
<testsuite name="default">
|
|
8
|
+
<directory suffix=".php">./tests</directory>
|
|
9
|
+
</testsuite>
|
|
10
|
+
</testsuites>
|
|
11
|
+
<filter>
|
|
12
|
+
<whitelist processUncoveredFilesFromWhitelist="true">
|
|
13
|
+
<directory suffix=".php">./src</directory>
|
|
14
|
+
</whitelist>
|
|
15
|
+
</filter>
|
|
16
|
+
</phpunit>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/art export-ignore
|
|
2
|
+
/docs export-ignore
|
|
3
|
+
/tests export-ignore
|
|
4
|
+
/scripts export-ignore
|
|
5
|
+
/.github export-ignore
|
|
6
|
+
/.php_cs export-ignore
|
|
7
|
+
.editorconfig export-ignore
|
|
8
|
+
.gitattributes export-ignore
|
|
9
|
+
.gitignore export-ignore
|
|
10
|
+
phpstan.neon.dist export-ignore
|
|
11
|
+
phpunit.xml.dist export-ignore
|
|
12
|
+
CHANGELOG.md export-ignore
|
|
13
|
+
CONTRIBUTING.md export-ignore
|
|
14
|
+
README.md export-ignore
|
package/server/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<p align="center">
|
|
3
|
+
<img src="https://camo.githubusercontent.com/870812d4ebe999bd1434db7ffcb27c2f347f1c2c6af1842e59ae8b28855b4b42/68747470733a2f2f666c622d6173736574732e73332e61702d736f757468656173742d312e616d617a6f6e6177732e636f6d2f7374617469632f73746f726566726f6e742d6c6f676f2e737667" width="380" height="100" />
|
|
4
|
+
</p>
|
|
5
|
+
<p align="center">
|
|
6
|
+
Open-source headless commerce & marketplace extension for Fleetbase
|
|
7
|
+
</p>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
------
|
|
11
|
+
This package provides the Storefront extension API resources required by Fleetbase API.
|
|
12
|
+
|
|
13
|
+
> **Requires [PHP 7.3.0+](https://php.net/releases/)**
|
|
14
|
+
|
|
15
|
+
⚡️ Install Storefront [Composer](https://getcomposer.org):
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
composer require fleetbase/fleetops-api
|
|
19
|
+
composer require fleetbase/storefront-api
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
🧹 Keep a modern codebase with **PHP CS Fixer**:
|
|
23
|
+
```bash
|
|
24
|
+
composer lint
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
⚗️ Run static analysis using **PHPStan**:
|
|
28
|
+
```bash
|
|
29
|
+
composer test:types
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
✅ Run unit tests using **PEST**
|
|
33
|
+
```bash
|
|
34
|
+
composer test:unit
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
🚀 Run the entire test suite:
|
|
38
|
+
```bash
|
|
39
|
+
composer test
|
|
40
|
+
```
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
$storefrontFlow = [
|
|
4
|
+
'created' => [
|
|
5
|
+
'sequence' => 0,
|
|
6
|
+
'color' => 'green',
|
|
7
|
+
'events' => [
|
|
8
|
+
[
|
|
9
|
+
'status' => 'Order is being prepared',
|
|
10
|
+
'details' => 'Order has been received by {storefront.name} and is being prepared',
|
|
11
|
+
'code' => 'preparing',
|
|
12
|
+
],
|
|
13
|
+
[
|
|
14
|
+
'status' => 'Order canceled',
|
|
15
|
+
'details' => 'Order could not be accepted',
|
|
16
|
+
'code' => 'canceled',
|
|
17
|
+
],
|
|
18
|
+
],
|
|
19
|
+
],
|
|
20
|
+
'preparing' => [
|
|
21
|
+
'sequence' => 1,
|
|
22
|
+
'color' => 'orange',
|
|
23
|
+
'events' => [
|
|
24
|
+
[
|
|
25
|
+
'if' => [['meta.is_pickup', '=', true]],
|
|
26
|
+
'status' => 'Order is ready for pickup',
|
|
27
|
+
'details' => 'Order is ready to be picked up by customer.',
|
|
28
|
+
'code' => 'ready',
|
|
29
|
+
],
|
|
30
|
+
[
|
|
31
|
+
'status' => 'Order dispatched',
|
|
32
|
+
'details' => 'Order has been dispatched to driver',
|
|
33
|
+
'code' => 'dispatched',
|
|
34
|
+
],
|
|
35
|
+
]
|
|
36
|
+
],
|
|
37
|
+
'ready' => [
|
|
38
|
+
'sequence' => 2,
|
|
39
|
+
'color' => 'green',
|
|
40
|
+
'events' => [
|
|
41
|
+
[
|
|
42
|
+
'status' => 'Order picked up',
|
|
43
|
+
'details' => 'Order has been picked up by customer.',
|
|
44
|
+
'code' => 'completed',
|
|
45
|
+
]
|
|
46
|
+
]
|
|
47
|
+
],
|
|
48
|
+
'dispatched' => [
|
|
49
|
+
'sequence' => 2,
|
|
50
|
+
'color' => 'blue',
|
|
51
|
+
'events' => [
|
|
52
|
+
[
|
|
53
|
+
'status' => 'Driver en-route',
|
|
54
|
+
'details' => 'Driver en-route to location',
|
|
55
|
+
'code' => 'driver_enroute',
|
|
56
|
+
]
|
|
57
|
+
]
|
|
58
|
+
],
|
|
59
|
+
'driver_enroute' => [
|
|
60
|
+
'sequence' => 3,
|
|
61
|
+
'color' => 'green',
|
|
62
|
+
'events' => [
|
|
63
|
+
[
|
|
64
|
+
'status' => 'Order completed',
|
|
65
|
+
'details' => 'Driver has completed order',
|
|
66
|
+
'code' => 'completed',
|
|
67
|
+
],
|
|
68
|
+
]
|
|
69
|
+
],
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
return [
|
|
74
|
+
/*
|
|
75
|
+
|--------------------------------------------------------------------------
|
|
76
|
+
| API Events
|
|
77
|
+
|--------------------------------------------------------------------------
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
'events' => [],
|
|
81
|
+
|
|
82
|
+
/*
|
|
83
|
+
|--------------------------------------------------------------------------
|
|
84
|
+
| API Resource Types
|
|
85
|
+
|--------------------------------------------------------------------------
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
'types' => [
|
|
89
|
+
'order' => [
|
|
90
|
+
[
|
|
91
|
+
'name' => 'Storefront',
|
|
92
|
+
'description' => 'Operational flow for storefront apps.',
|
|
93
|
+
'key' => 'storefront',
|
|
94
|
+
'meta_type' => 'order_config',
|
|
95
|
+
'meta' => [
|
|
96
|
+
'flow' => $storefrontFlow,
|
|
97
|
+
],
|
|
98
|
+
],
|
|
99
|
+
]
|
|
100
|
+
]
|
|
101
|
+
];
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
use Fleetbase\Support\Utils;
|
|
4
|
+
|
|
5
|
+
$host = env('DB_HOST', '127.0.0.1');
|
|
6
|
+
$database = env('DB_DATABASE', 'fleetbase');
|
|
7
|
+
$username = env('DB_USERNAME', 'fleetbase');
|
|
8
|
+
$password = env('DB_PASSWORD', '');
|
|
9
|
+
|
|
10
|
+
if ($databaseUrl = getenv('DATABASE_URL')) {
|
|
11
|
+
$url = Utils::parseUrl($databaseUrl);
|
|
12
|
+
|
|
13
|
+
$host = $url['host'];
|
|
14
|
+
$username = $url['user'];
|
|
15
|
+
if (isset($url['pass'])) {
|
|
16
|
+
$password = $url['pass'];
|
|
17
|
+
}
|
|
18
|
+
$database = substr($url['path'], 1);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
$mysql_options = [];
|
|
22
|
+
|
|
23
|
+
if (env('APP_ENV') === 'local') {
|
|
24
|
+
$mysql_options[PDO::ATTR_EMULATE_PREPARES] = true;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
|--------------------------------------------------------------------------
|
|
29
|
+
| Database Connections
|
|
30
|
+
|--------------------------------------------------------------------------
|
|
31
|
+
|
|
|
32
|
+
| Here are each of the database connections setup for your application.
|
|
33
|
+
| Of course, examples of configuring each database platform that is
|
|
34
|
+
| supported by Laravel is shown below to make development simple.
|
|
35
|
+
|
|
|
36
|
+
|
|
|
37
|
+
| All database work in Laravel is done through the PHP PDO facilities
|
|
38
|
+
| so make sure you have the driver for your particular database of
|
|
39
|
+
| choice installed on your machine before you begin development.
|
|
40
|
+
|
|
|
41
|
+
*/
|
|
42
|
+
return [
|
|
43
|
+
'storefront' => [
|
|
44
|
+
'driver' => 'mysql',
|
|
45
|
+
'host' => $host,
|
|
46
|
+
'port' => env('STOREFRONT_DB_PORT', '3306'),
|
|
47
|
+
'database' => $database . '_storefront',
|
|
48
|
+
'username' => $username,
|
|
49
|
+
'password' => $password,
|
|
50
|
+
'charset' => 'utf8mb4',
|
|
51
|
+
'collation' => 'utf8mb4_unicode_ci',
|
|
52
|
+
'prefix' => '',
|
|
53
|
+
'strict' => true,
|
|
54
|
+
'engine' => null,
|
|
55
|
+
'options' => $mysql_options,
|
|
56
|
+
],
|
|
57
|
+
];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* -------------------------------------------
|
|
5
|
+
* Fleetbase Core API Configuration
|
|
6
|
+
* -------------------------------------------
|
|
7
|
+
*/
|
|
8
|
+
return [
|
|
9
|
+
'api' => [
|
|
10
|
+
'version' => '0.0.1',
|
|
11
|
+
'routing' => [
|
|
12
|
+
'prefix' => 'storefront',
|
|
13
|
+
'internal_prefix' => 'int'
|
|
14
|
+
],
|
|
15
|
+
],
|
|
16
|
+
'connection' => [
|
|
17
|
+
'db' => env('STOREFRONT_DB_CONNECTION', 'storefront')
|
|
18
|
+
]
|
|
19
|
+
];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
return [
|
|
4
|
+
'username' => env('TWILIO_USERNAME'), // optional when using auth token
|
|
5
|
+
'password' => env('TWILIO_PASSWORD'), // optional when using auth token
|
|
6
|
+
'auth_token' => env('TWILIO_TOKEN'), // optional when using username and password
|
|
7
|
+
'account_sid' => env('TWILIO_SID'),
|
|
8
|
+
|
|
9
|
+
'from' => env('TWILIO_FROM'), // optional
|
|
10
|
+
'alphanumeric_sender' => env('TWILIO_ALPHA_SENDER'),
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* See https://www.twilio.com/docs/sms/services.
|
|
14
|
+
*/
|
|
15
|
+
'sms_service_sid' => env('TWILIO_SMS_SERVICE_SID'),
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Specify a number where all calls/messages should be routed. This can be used in development/staging environments
|
|
19
|
+
* for testing.
|
|
20
|
+
*/
|
|
21
|
+
'debug_to' => env('TWILIO_DEBUG_TO'),
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* If an exception is thrown with one of these error codes, it will be caught & suppressed.
|
|
25
|
+
* To replicate the 2.x behaviour, specify '*' in the array, which will cause all exceptions to be suppressed.
|
|
26
|
+
* Suppressed errors will not be logged or reported, but the `NotificationFailed` event will be emitted.
|
|
27
|
+
*
|
|
28
|
+
* @see https://www.twilio.com/docs/api/errors
|
|
29
|
+
*/
|
|
30
|
+
'ignored_error_codes' => [
|
|
31
|
+
21608, // The 'to' phone number provided is not yet verified for this account.
|
|
32
|
+
21211, // Invalid 'To' Phone Number
|
|
33
|
+
21614, // 'To' number is not a valid mobile number
|
|
34
|
+
21408, // Permission to send an SMS has not been enabled for the region indicated by the 'To' number
|
|
35
|
+
],
|
|
36
|
+
];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
use Illuminate\Database\Migrations\Migration;
|
|
4
|
+
use Illuminate\Database\Schema\Blueprint;
|
|
5
|
+
use Illuminate\Support\Facades\Schema;
|
|
6
|
+
|
|
7
|
+
return new class extends Migration
|
|
8
|
+
{
|
|
9
|
+
/**
|
|
10
|
+
* Run the migrations.
|
|
11
|
+
*
|
|
12
|
+
* @return void
|
|
13
|
+
*/
|
|
14
|
+
public function up()
|
|
15
|
+
{
|
|
16
|
+
Schema::connection(config('storefront.connection.db'))->create('carts', function (Blueprint $table) {
|
|
17
|
+
$table->bigIncrements('id');
|
|
18
|
+
$table->char('uuid', 36)->nullable()->unique();
|
|
19
|
+
$table->string('public_id')->nullable()->index();
|
|
20
|
+
$table->char('company_uuid', 36)->nullable()->index('carts_company_uuid_foreign');
|
|
21
|
+
$table->char('user_uuid', 36)->nullable()->index('carts_user_uuid_foreign');
|
|
22
|
+
$table->char('checkout_uuid', 36)->nullable()->index('carts_checkout_uuid_foreign');
|
|
23
|
+
$table->string('customer_id')->nullable();
|
|
24
|
+
$table->string('unique_identifier')->nullable();
|
|
25
|
+
$table->string('currency')->nullable();
|
|
26
|
+
$table->string('discount_code')->nullable();
|
|
27
|
+
$table->json('items')->nullable();
|
|
28
|
+
$table->json('events')->nullable();
|
|
29
|
+
$table->dateTime('expires_at')->nullable()->index();
|
|
30
|
+
$table->softDeletes();
|
|
31
|
+
$table->timestamps();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Reverse the migrations.
|
|
37
|
+
*
|
|
38
|
+
* @return void
|
|
39
|
+
*/
|
|
40
|
+
public function down()
|
|
41
|
+
{
|
|
42
|
+
Schema::connection(config('storefront.connection.db'))->dropIfExists('carts');
|
|
43
|
+
}
|
|
44
|
+
};
|