@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.
Files changed (163) hide show
  1. package/.php-cs-fixer.php +29 -0
  2. package/LICENSE.md +16 -4
  3. package/README.md +106 -13
  4. package/composer.json +88 -0
  5. package/extension.json +10 -0
  6. package/package.json +6 -6
  7. package/phpstan.neon.dist +8 -0
  8. package/phpunit.xml.dist +16 -0
  9. package/server/.gitattributes +14 -0
  10. package/server/README.md +40 -0
  11. package/server/config/api.php +101 -0
  12. package/server/config/database.connections.php +57 -0
  13. package/server/config/storefront.php +19 -0
  14. package/server/config/twilio-notification-channel.php +36 -0
  15. package/server/migrations/2023_05_03_025307_create_carts_table.php +44 -0
  16. package/server/migrations/2023_05_03_025307_create_checkouts_table.php +51 -0
  17. package/server/migrations/2023_05_03_025307_create_gateways_table.php +48 -0
  18. package/server/migrations/2023_05_03_025307_create_network_stores_table.php +36 -0
  19. package/server/migrations/2023_05_03_025307_create_networks_table.php +56 -0
  20. package/server/migrations/2023_05_03_025307_create_notification_channels_table.php +43 -0
  21. package/server/migrations/2023_05_03_025307_create_payment_methods_table.php +44 -0
  22. package/server/migrations/2023_05_03_025307_create_product_addon_categories_table.php +38 -0
  23. package/server/migrations/2023_05_03_025307_create_product_addons_table.php +43 -0
  24. package/server/migrations/2023_05_03_025307_create_product_hours_table.php +37 -0
  25. package/server/migrations/2023_05_03_025307_create_product_store_locations_table.php +34 -0
  26. package/server/migrations/2023_05_03_025307_create_product_variant_options_table.php +40 -0
  27. package/server/migrations/2023_05_03_025307_create_product_variants_table.php +44 -0
  28. package/server/migrations/2023_05_03_025307_create_products_table.php +59 -0
  29. package/server/migrations/2023_05_03_025307_create_reviews_table.php +41 -0
  30. package/server/migrations/2023_05_03_025307_create_store_hours_table.php +37 -0
  31. package/server/migrations/2023_05_03_025307_create_store_locations_table.php +38 -0
  32. package/server/migrations/2023_05_03_025307_create_stores_table.php +57 -0
  33. package/server/migrations/2023_05_03_025307_create_votes_table.php +39 -0
  34. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_carts_table.php +40 -0
  35. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_checkouts_table.php +48 -0
  36. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_gateways_table.php +40 -0
  37. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_network_stores_table.php +40 -0
  38. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_networks_table.php +42 -0
  39. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_notification_channels_table.php +40 -0
  40. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_payment_methods_table.php +40 -0
  41. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_addon_categories_table.php +38 -0
  42. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_addons_table.php +38 -0
  43. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_hours_table.php +32 -0
  44. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_store_locations_table.php +34 -0
  45. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_variant_options_table.php +32 -0
  46. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_variants_table.php +32 -0
  47. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_products_table.php +44 -0
  48. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_reviews_table.php +38 -0
  49. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_store_hours_table.php +32 -0
  50. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_store_locations_table.php +40 -0
  51. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_stores_table.php +42 -0
  52. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_votes_table.php +38 -0
  53. package/server/src/Auth/Schemas/Storefront.php +95 -0
  54. package/server/src/Console/Commands/NotifyStorefrontOrderNearby.php +86 -0
  55. package/server/src/Expansions/EntityExpansion.php +44 -0
  56. package/server/src/Http/Controllers/ActionController.php +119 -0
  57. package/server/src/Http/Controllers/AddonCategoryController.php +13 -0
  58. package/server/src/Http/Controllers/CustomerController.php +13 -0
  59. package/server/src/Http/Controllers/GatewayController.php +13 -0
  60. package/server/src/Http/Controllers/MetricsController.php +71 -0
  61. package/server/src/Http/Controllers/NetworkController.php +170 -0
  62. package/server/src/Http/Controllers/NotificationChannelController.php +13 -0
  63. package/server/src/Http/Controllers/OrderController.php +154 -0
  64. package/server/src/Http/Controllers/ProductAddonCategoryController.php +14 -0
  65. package/server/src/Http/Controllers/ProductAddonController.php +14 -0
  66. package/server/src/Http/Controllers/ProductController.php +123 -0
  67. package/server/src/Http/Controllers/ProductHourController.php +13 -0
  68. package/server/src/Http/Controllers/ProductVariantController.php +13 -0
  69. package/server/src/Http/Controllers/ProductVariantOptionController.php +13 -0
  70. package/server/src/Http/Controllers/ReviewController.php +13 -0
  71. package/server/src/Http/Controllers/StoreController.php +26 -0
  72. package/server/src/Http/Controllers/StoreHourController.php +13 -0
  73. package/server/src/Http/Controllers/StoreLocationController.php +13 -0
  74. package/server/src/Http/Controllers/StorefrontController.php +15 -0
  75. package/server/src/Http/Controllers/VoteController.php +13 -0
  76. package/server/src/Http/Controllers/v1/CartController.php +161 -0
  77. package/server/src/Http/Controllers/v1/CategoryController.php +138 -0
  78. package/server/src/Http/Controllers/v1/CheckoutController.php +957 -0
  79. package/server/src/Http/Controllers/v1/CustomerController.php +482 -0
  80. package/server/src/Http/Controllers/v1/GatewayControllerController.php +11 -0
  81. package/server/src/Http/Controllers/v1/NetworkController.php +281 -0
  82. package/server/src/Http/Controllers/v1/PaymentMethodController.php +11 -0
  83. package/server/src/Http/Controllers/v1/ProductController.php +94 -0
  84. package/server/src/Http/Controllers/v1/ReviewController.php +270 -0
  85. package/server/src/Http/Controllers/v1/ServiceQuoteController.php +402 -0
  86. package/server/src/Http/Controllers/v1/StoreController.php +176 -0
  87. package/server/src/Http/Filter/AddonCategoryFilter.php +19 -0
  88. package/server/src/Http/Filter/CustomerFilter.php +18 -0
  89. package/server/src/Http/Filter/GatewayFilter.php +13 -0
  90. package/server/src/Http/Filter/NetworkFilter.php +18 -0
  91. package/server/src/Http/Filter/NotificationChannelFilter.php +13 -0
  92. package/server/src/Http/Filter/OrderFilter.php +46 -0
  93. package/server/src/Http/Filter/ProductFilter.php +28 -0
  94. package/server/src/Http/Filter/StoreFilter.php +42 -0
  95. package/server/src/Http/Filter/StoreLocationFilter.php +23 -0
  96. package/server/src/Http/Middleware/SetStorefrontSession.php +130 -0
  97. package/server/src/Http/Requests/AddStoreToNetworkCategory.php +45 -0
  98. package/server/src/Http/Requests/CaptureOrderRequest.php +30 -0
  99. package/server/src/Http/Requests/CreateCustomerRequest.php +44 -0
  100. package/server/src/Http/Requests/CreateReviewRequest.php +34 -0
  101. package/server/src/Http/Requests/GetServiceQuoteFromCart.php +40 -0
  102. package/server/src/Http/Requests/InitializeCheckoutRequest.php +38 -0
  103. package/server/src/Http/Requests/NetworkActionRequest.php +43 -0
  104. package/server/src/Http/Requests/VerifyCreateCustomerRequest.php +31 -0
  105. package/server/src/Http/Resources/Cart.php +31 -0
  106. package/server/src/Http/Resources/Category.php +48 -0
  107. package/server/src/Http/Resources/Customer.php +36 -0
  108. package/server/src/Http/Resources/Gateway.php +32 -0
  109. package/server/src/Http/Resources/Media.php +29 -0
  110. package/server/src/Http/Resources/Network.php +48 -0
  111. package/server/src/Http/Resources/Product.php +209 -0
  112. package/server/src/Http/Resources/Review.php +45 -0
  113. package/server/src/Http/Resources/ReviewCustomer.php +60 -0
  114. package/server/src/Http/Resources/Store.php +76 -0
  115. package/server/src/Http/Resources/StoreHour.php +29 -0
  116. package/server/src/Http/Resources/StoreLocation.php +33 -0
  117. package/server/src/Imports/ProductsImport.php +20 -0
  118. package/server/src/Jobs/DownloadProductImageUrl.php +60 -0
  119. package/server/src/Listeners/HandleOrderCompleted.php +31 -0
  120. package/server/src/Listeners/HandleOrderDispatched.php +34 -0
  121. package/server/src/Listeners/HandleOrderDriverAssigned.php +37 -0
  122. package/server/src/Listeners/HandleOrderStarted.php +27 -0
  123. package/server/src/Mail/StorefrontNetworkInvite.php +48 -0
  124. package/server/src/Models/AddonCategory.php +30 -0
  125. package/server/src/Models/Cart.php +691 -0
  126. package/server/src/Models/Checkout.php +166 -0
  127. package/server/src/Models/Customer.php +88 -0
  128. package/server/src/Models/Gateway.php +165 -0
  129. package/server/src/Models/Network.php +300 -0
  130. package/server/src/Models/NetworkStore.php +86 -0
  131. package/server/src/Models/NotificationChannel.php +147 -0
  132. package/server/src/Models/PaymentMethod.php +99 -0
  133. package/server/src/Models/Product.php +315 -0
  134. package/server/src/Models/ProductAddon.php +128 -0
  135. package/server/src/Models/ProductAddonCategory.php +90 -0
  136. package/server/src/Models/ProductHour.php +59 -0
  137. package/server/src/Models/ProductStoreLocation.php +77 -0
  138. package/server/src/Models/ProductVariant.php +125 -0
  139. package/server/src/Models/ProductVariantOption.php +86 -0
  140. package/server/src/Models/Review.php +127 -0
  141. package/server/src/Models/Store.php +478 -0
  142. package/server/src/Models/StoreHour.php +59 -0
  143. package/server/src/Models/StoreLocation.php +126 -0
  144. package/server/src/Models/StorefrontModel.php +22 -0
  145. package/server/src/Models/Vote.php +84 -0
  146. package/server/src/Notifications/StorefrontOrderCanceled.php +196 -0
  147. package/server/src/Notifications/StorefrontOrderCompleted.php +201 -0
  148. package/server/src/Notifications/StorefrontOrderCreated.php +157 -0
  149. package/server/src/Notifications/StorefrontOrderDriverAssigned.php +200 -0
  150. package/server/src/Notifications/StorefrontOrderEnroute.php +199 -0
  151. package/server/src/Notifications/StorefrontOrderNearby.php +201 -0
  152. package/server/src/Notifications/StorefrontOrderPreparing.php +202 -0
  153. package/server/src/Notifications/StorefrontOrderReadyForPickup.php +202 -0
  154. package/server/src/Observers/NetworkObserver.php +40 -0
  155. package/server/src/Observers/ProductObserver.php +118 -0
  156. package/server/src/Providers/EventServiceProvider.php +23 -0
  157. package/server/src/Providers/StorefrontServiceProvider.php +103 -0
  158. package/server/src/Support/Metrics.php +193 -0
  159. package/server/src/Support/OrderConfig.php +13 -0
  160. package/server/src/Support/QPay.php +208 -0
  161. package/server/src/Support/Storefront.php +201 -0
  162. package/server/src/routes.php +180 -0
  163. package/server/tests/Feature.php +5 -0
@@ -0,0 +1,125 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\Storefront\Models;
4
+
5
+ use Fleetbase\Casts\Json;
6
+ use Fleetbase\Models\Category;
7
+ use Fleetbase\Models\User;
8
+ use Fleetbase\Traits\HasMetaAttributes;
9
+ use Fleetbase\Traits\HasUuid;
10
+ use Fleetbase\Traits\HasApiModelBehavior;
11
+ use Fleetbase\Traits\HasPublicid;
12
+ use Spatie\Sluggable\HasSlug;
13
+ use Spatie\Sluggable\SlugOptions;
14
+
15
+ class ProductVariant extends StorefrontModel
16
+ {
17
+ use HasUuid, HasPublicid, HasApiModelBehavior, HasMetaAttributes, HasSlug;
18
+
19
+ /**
20
+ * The type of public Id to generate
21
+ *
22
+ * @var string
23
+ */
24
+ protected $publicIdType = 'variant';
25
+
26
+ /**
27
+ * The database table used by the model.
28
+ *
29
+ * @var string
30
+ */
31
+ protected $table = 'product_variants';
32
+
33
+ /**
34
+ * These attributes that can be queried
35
+ *
36
+ * @var array
37
+ */
38
+ protected $searchableColumns = ['name', 'description'];
39
+
40
+ /**
41
+ * The attributes that are mass assignable.
42
+ *
43
+ * @var array
44
+ */
45
+ protected $fillable = [
46
+ 'public_id',
47
+ 'product_uuid',
48
+ 'name',
49
+ 'description',
50
+ 'translations',
51
+ 'meta',
52
+ 'is_multiselect',
53
+ 'is_required',
54
+ 'min',
55
+ 'max'
56
+ ];
57
+
58
+ /**
59
+ * The attributes that should be cast to native types.
60
+ *
61
+ * @var array
62
+ */
63
+ protected $casts = [
64
+ 'is_multiselect' => 'boolean',
65
+ 'is_required' => 'boolean',
66
+ 'meta' => Json::class,
67
+ 'translations' => Json::class
68
+ ];
69
+
70
+ /**
71
+ * Dynamic attributes that are appended to object
72
+ *
73
+ * @var array
74
+ */
75
+ protected $appends = [];
76
+
77
+ /**
78
+ * Relationships to auto load with driver
79
+ *
80
+ * @var array
81
+ */
82
+ protected $with = [];
83
+
84
+ /**
85
+ * @var \Spatie\Sluggable\SlugOptions
86
+ */
87
+ public function getSlugOptions(): SlugOptions
88
+ {
89
+ return SlugOptions::create()
90
+ ->generateSlugsFrom('name')
91
+ ->saveSlugsTo('slug');
92
+ }
93
+
94
+ /**
95
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
96
+ */
97
+ public function createdBy()
98
+ {
99
+ return $this->setConnection(config('fleetbase.connection.db'))->belongsTo(User::class);
100
+ }
101
+
102
+ /**
103
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
104
+ */
105
+ public function category()
106
+ {
107
+ return $this->setConnection(config('fleetbase.connection.db'))->belongsTo(Category::class);
108
+ }
109
+
110
+ /**
111
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
112
+ */
113
+ public function product()
114
+ {
115
+ return $this->belongsTo(Product::class);
116
+ }
117
+
118
+ /**
119
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
120
+ */
121
+ public function options()
122
+ {
123
+ return $this->hasMany(ProductVariantOption::class);
124
+ }
125
+ }
@@ -0,0 +1,86 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\Storefront\Models;
4
+
5
+ use Fleetbase\Casts\Json;
6
+ use Fleetbase\FleetOps\Support\Utils;
7
+ use Fleetbase\Traits\HasMetaAttributes;
8
+ use Fleetbase\Traits\HasUuid;
9
+ use Fleetbase\Traits\HasApiModelBehavior;
10
+ use Fleetbase\Traits\HasPublicid;
11
+
12
+ class ProductVariantOption extends StorefrontModel
13
+ {
14
+ use HasUuid, HasPublicid, HasMetaAttributes, HasApiModelBehavior;
15
+
16
+ /**
17
+ * The type of public Id to generate
18
+ *
19
+ * @var string
20
+ */
21
+ protected $publicIdType = 'variant_option';
22
+
23
+ /**
24
+ * The database table used by the model.
25
+ *
26
+ * @var string
27
+ */
28
+ protected $table = 'product_variant_options';
29
+
30
+ /**
31
+ * These attributes that can be queried
32
+ *
33
+ * @var array
34
+ */
35
+ protected $searchableColumns = ['name', 'description'];
36
+
37
+ /**
38
+ * The attributes that are mass assignable.
39
+ *
40
+ * @var array
41
+ */
42
+ protected $fillable = [
43
+ 'public_id',
44
+ 'product_variant_uuid',
45
+ 'name',
46
+ 'description',
47
+ 'translations',
48
+ 'meta',
49
+ 'additional_cost'
50
+ ];
51
+
52
+ /**
53
+ * The attributes that should be cast to native types.
54
+ *
55
+ * @var array
56
+ */
57
+ protected $casts = [
58
+ 'translations' => Json::class,
59
+ 'meta' => Json::class
60
+ ];
61
+
62
+ /**
63
+ * Dynamic attributes that are appended to object
64
+ *
65
+ * @var array
66
+ */
67
+ protected $appends = [];
68
+
69
+ /**
70
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
71
+ */
72
+ public function productVariant()
73
+ {
74
+ return $this->belongsTo(ProductVariant::class);
75
+ }
76
+
77
+ /**
78
+ * Set the price as only numbers
79
+ *
80
+ * @void
81
+ */
82
+ public function setAdditionalCostAttribute($value)
83
+ {
84
+ $this->attributes['additional_cost'] = Utils::numbersOnly($value);
85
+ }
86
+ }
@@ -0,0 +1,127 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\Storefront\Models;
4
+
5
+ use Fleetbase\Models\File;
6
+ use Fleetbase\FleetOps\Models\Contact;
7
+ use Fleetbase\Traits\HasUuid;
8
+ use Fleetbase\Traits\HasApiModelBehavior;
9
+ use Fleetbase\Traits\HasPublicid;
10
+
11
+ class Review extends StorefrontModel
12
+ {
13
+ use HasUuid, HasPublicid, HasApiModelBehavior;
14
+
15
+ /**
16
+ * The type of public Id to generate
17
+ *
18
+ * @var string
19
+ */
20
+ protected $publicIdType = 'review';
21
+
22
+ /**
23
+ * The database table used by the model.
24
+ *
25
+ * @var string
26
+ */
27
+ protected $table = 'reviews';
28
+
29
+ /**
30
+ * These attributes that can be queried
31
+ *
32
+ * @var array
33
+ */
34
+ protected $searchableColumns = [];
35
+
36
+ /**
37
+ * The attributes that are mass assignable.
38
+ *
39
+ * @var array
40
+ */
41
+ protected $fillable = [
42
+ 'created_by_uuid',
43
+ 'customer_uuid',
44
+ 'subject_uuid',
45
+ 'subject_type',
46
+ 'rating',
47
+ 'content',
48
+ 'rejected',
49
+ ];
50
+
51
+ /**
52
+ * The attributes that should be cast to native types.
53
+ *
54
+ * @var array
55
+ */
56
+ protected $casts = [];
57
+
58
+ /**
59
+ * Dynamic attributes that are appended to object
60
+ *
61
+ * @var array
62
+ */
63
+ protected $appends = [];
64
+
65
+ /**
66
+ * Attributes that is filterable on this model
67
+ *
68
+ * @var array
69
+ */
70
+ protected $filterParams = ['store'];
71
+
72
+ /**
73
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
74
+ */
75
+ public function createdBy()
76
+ {
77
+ return $this->setConnection(config('fleetbase.connection.db'))->belongsTo(User::class);
78
+ }
79
+
80
+ /**
81
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
82
+ */
83
+ public function customer()
84
+ {
85
+ return $this->setConnection(config('fleetbase.connection.db'))->belongsTo(Contact::class);
86
+ }
87
+
88
+ /**
89
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
90
+ */
91
+ public function votes()
92
+ {
93
+ return $this->hasMany(Vote::class, 'subject_uuid');
94
+ }
95
+
96
+ /**
97
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
98
+ */
99
+ public function files()
100
+ {
101
+ return $this->setConnection(config('fleetbase.connection.db'))->hasMany(File::class, 'subject_uuid');
102
+ }
103
+
104
+ /**
105
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
106
+ */
107
+ public function photos()
108
+ {
109
+ return $this->files()->where('type', 'storefront_review_upload')->where('content_type', 'like', 'image%');
110
+ }
111
+
112
+ /**
113
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
114
+ */
115
+ public function videos()
116
+ {
117
+ return $this->files()->where('type', 'storefront_review_upload')->where('content_type', 'like', 'video%');
118
+ }
119
+
120
+ /**
121
+ * @return \Illuminate\Database\Eloquent\Relations\MorphTo
122
+ */
123
+ public function subject()
124
+ {
125
+ return $this->morphTo(__FUNCTION__, 'subject_type', 'subject_uuid');
126
+ }
127
+ }