@fleetbase/storefront-engine 0.3.24 → 0.3.25
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/addon/adapters/catalog.js +1 -0
- package/addon/adapters/food-truck.js +1 -0
- package/addon/components/customer-panel/orders.hbs +7 -1
- package/addon/components/modals/assign-food-truck-catalogs.hbs +14 -0
- package/addon/components/modals/create-catalog.hbs +96 -0
- package/addon/components/modals/create-first-store.hbs +6 -1
- package/addon/components/modals/create-food-truck.hbs +69 -0
- package/addon/components/modals/manage-addons.js +1 -15
- package/addon/components/order-panel.hbs +2 -2
- package/addon/components/widget/customers.hbs +5 -5
- package/addon/components/widget/orders.hbs +7 -4
- package/addon/components/widget/orders.js +11 -1
- package/addon/controllers/catalogs/index.js +121 -0
- package/addon/controllers/food-trucks/index.js +100 -0
- package/addon/models/catalog-category.js +6 -0
- package/addon/models/catalog-hour.js +72 -0
- package/addon/models/catalog.js +45 -0
- package/addon/models/food-truck.js +47 -0
- package/addon/models/product.js +1 -0
- package/addon/routes/catalogs/index.js +22 -0
- package/addon/routes/catalogs.js +3 -0
- package/addon/routes/food-trucks/index.js +22 -0
- package/addon/routes/food-trucks.js +3 -0
- package/addon/routes.js +6 -0
- package/addon/serializers/catalog-category.js +15 -0
- package/addon/serializers/catalog.js +16 -0
- package/addon/serializers/food-truck.js +18 -0
- package/addon/serializers/product-variant.js +0 -1
- package/addon/styles/storefront-engine.css +15 -5
- package/addon/templates/application.hbs +14 -0
- package/addon/templates/catalogs/index.hbs +46 -0
- package/addon/templates/catalogs.hbs +1 -0
- package/addon/templates/customers/index.hbs +1 -1
- package/addon/templates/food-trucks/index.hbs +52 -0
- package/addon/templates/food-trucks.hbs +1 -0
- package/addon/templates/networks/index.hbs +14 -2
- package/addon/templates/products/index/category/new.hbs +10 -3
- package/addon/templates/products/index/index.hbs +1 -2
- package/addon/templates/products/index.hbs +16 -2
- package/app/adapters/catalog.js +1 -0
- package/app/adapters/food-truck.js +1 -0
- package/app/components/modals/assign-food-truck-catalogs.js +1 -0
- package/app/components/modals/create-catalog.js +1 -0
- package/app/components/modals/create-food-truck.js +1 -0
- package/app/controllers/catalogs/index.js +1 -0
- package/app/controllers/food-trucks/index.js +1 -0
- package/app/models/catalog-category.js +1 -0
- package/app/models/catalog-hour.js +1 -0
- package/app/models/catalog.js +1 -0
- package/app/models/food-truck.js +1 -0
- package/app/routes/catalogs/index.js +1 -0
- package/app/routes/catalogs.js +1 -0
- package/app/routes/food-trucks/index.js +1 -0
- package/app/routes/food-trucks.js +1 -0
- package/app/serializers/catalog-category.js +1 -0
- package/app/serializers/catalog.js +1 -0
- package/app/serializers/food-truck.js +1 -0
- package/app/templates/catalogs/index.js +1 -0
- package/app/templates/catalogs.js +1 -0
- package/app/templates/food-trucks/index.js +1 -0
- package/app/templates/food-trucks.js +1 -0
- package/composer.json +1 -1
- package/extension.json +1 -1
- package/package.json +1 -1
- package/server/migrations/2025_01_30_042853_create_catalogs_table.php +41 -0
- package/server/migrations/2025_01_30_044728_create_catalog_category_products_table.php +35 -0
- package/server/migrations/2025_01_30_050611_create_food_trucks_table.php +72 -0
- package/server/migrations/2025_01_30_052157_create_catalog_subjects_table.php +54 -0
- package/server/migrations/2025_01_30_052402_create_catalog_hours_table.php +39 -0
- package/server/src/Auth/Schemas/Storefront.php +16 -0
- package/server/src/Console/Commands/PurgeExpiredCarts.php +13 -3
- package/server/src/Http/Controllers/CatalogCategoryController.php +13 -0
- package/server/src/Http/Controllers/CatalogController.php +13 -0
- package/server/src/Http/Controllers/CatalogHourController.php +13 -0
- package/server/src/Http/Controllers/FoodTruckController.php +13 -0
- package/server/src/Http/Controllers/v1/CatalogController.php +38 -0
- package/server/src/Http/Controllers/v1/CategoryController.php +1 -1
- package/server/src/Http/Controllers/v1/FoodTruckController.php +39 -0
- package/server/src/Http/Controllers/v1/ProductController.php +1 -1
- package/server/src/Http/Controllers/v1/ReviewController.php +8 -6
- package/server/src/Http/Filter/FoodTruckFilter.php +37 -0
- package/server/src/Http/Resources/Catalog.php +34 -0
- package/server/src/Http/Resources/CatalogCategory.php +38 -0
- package/server/src/Http/Resources/CatalogProduct.php +55 -0
- package/server/src/Http/Resources/FoodTruck.php +42 -0
- package/server/src/Http/Resources/Product.php +1 -0
- package/server/src/Models/AddonCategory.php +12 -0
- package/server/src/Models/Cart.php +6 -0
- package/server/src/Models/Catalog.php +213 -0
- package/server/src/Models/CatalogCategory.php +118 -0
- package/server/src/Models/CatalogHour.php +46 -0
- package/server/src/Models/CatalogProduct.php +25 -0
- package/server/src/Models/CatalogSubject.php +70 -0
- package/server/src/Models/FoodTruck.php +182 -0
- package/server/src/Models/Product.php +16 -1
- package/server/src/Notifications/StorefrontOrderCanceled.php +80 -121
- package/server/src/Notifications/StorefrontOrderCompleted.php +86 -131
- package/server/src/Notifications/StorefrontOrderCreated.php +29 -15
- package/server/src/Notifications/StorefrontOrderDriverAssigned.php +96 -130
- package/server/src/Notifications/StorefrontOrderEnroute.php +89 -129
- package/server/src/Notifications/StorefrontOrderNearby.php +103 -132
- package/server/src/Notifications/StorefrontOrderPreparing.php +84 -134
- package/server/src/Notifications/StorefrontOrderReadyForPickup.php +89 -134
- package/server/src/Observers/CatalogObserver.php +40 -0
- package/server/src/Observers/FoodTruckObserver.php +24 -0
- package/server/src/Observers/ProductObserver.php +3 -27
- package/server/src/Providers/StorefrontServiceProvider.php +5 -3
- package/server/src/Support/PushNotification.php +127 -0
- package/server/src/routes.php +10 -0
- package/translations/en-us.yaml +5 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
use Fleetbase\Support\Utils;
|
|
4
|
+
use Illuminate\Database\Migrations\Migration;
|
|
5
|
+
use Illuminate\Database\Query\Expression;
|
|
6
|
+
use Illuminate\Database\Schema\Blueprint;
|
|
7
|
+
use Illuminate\Support\Facades\Schema;
|
|
8
|
+
use Illuminate\Support\Str;
|
|
9
|
+
|
|
10
|
+
return new class extends Migration {
|
|
11
|
+
/**
|
|
12
|
+
* Run the migrations.
|
|
13
|
+
*/
|
|
14
|
+
public function up(): void
|
|
15
|
+
{
|
|
16
|
+
$databaseName = Utils::getFleetbaseDatabaseName();
|
|
17
|
+
|
|
18
|
+
Schema::connection(config('storefront.connection.db'))->create('catalogs', function (Blueprint $table) use ($databaseName) {
|
|
19
|
+
$table->bigIncrements('id');
|
|
20
|
+
$table->uuid('uuid')->unique()->default(Str::uuid()->toString());
|
|
21
|
+
$table->string('public_id')->unique()->nullable();
|
|
22
|
+
$table->foreignUuid('store_uuid')->nullable()->references('uuid')->on('stores')->onUpdate('CASCADE')->onDelete('SET NULL');
|
|
23
|
+
$table->foreignUuid('company_uuid')->nullable()->references('uuid')->on(new Expression($databaseName . '.companies'))->onUpdate('CASCADE')->onDelete('SET NULL');
|
|
24
|
+
$table->foreignUuid('created_by_uuid')->nullable()->references('uuid')->on(new Expression($databaseName . '.users'))->onUpdate('CASCADE')->onDelete('SET NULL');
|
|
25
|
+
$table->string('name');
|
|
26
|
+
$table->text('description')->nullable();
|
|
27
|
+
$table->string('status')->default('draft');
|
|
28
|
+
$table->json('meta')->nullable();
|
|
29
|
+
$table->timestamps();
|
|
30
|
+
$table->softDeletes();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Reverse the migrations.
|
|
36
|
+
*/
|
|
37
|
+
public function down(): void
|
|
38
|
+
{
|
|
39
|
+
Schema::connection(config('storefront.connection.db'))->dropIfExists('catalogs');
|
|
40
|
+
}
|
|
41
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
use Fleetbase\Support\Utils;
|
|
4
|
+
use Illuminate\Database\Migrations\Migration;
|
|
5
|
+
use Illuminate\Database\Query\Expression;
|
|
6
|
+
use Illuminate\Database\Schema\Blueprint;
|
|
7
|
+
use Illuminate\Support\Facades\Schema;
|
|
8
|
+
use Illuminate\Support\Str;
|
|
9
|
+
|
|
10
|
+
return new class extends Migration {
|
|
11
|
+
/**
|
|
12
|
+
* Run the migrations.
|
|
13
|
+
*/
|
|
14
|
+
public function up(): void
|
|
15
|
+
{
|
|
16
|
+
$databaseName = Utils::getFleetbaseDatabaseName();
|
|
17
|
+
|
|
18
|
+
Schema::connection(config('storefront.connection.db'))->create('catalog_category_products', function (Blueprint $table) use ($databaseName) {
|
|
19
|
+
$table->bigIncrements('id');
|
|
20
|
+
$table->uuid('uuid')->unique()->default(Str::uuid()->toString());
|
|
21
|
+
$table->foreignUuid('catalog_category_uuid')->nullable()->references('uuid')->on(new Expression($databaseName . '.categories'))->onUpdate('CASCADE')->onDelete('CASCADE');
|
|
22
|
+
$table->foreignUuid('product_uuid')->nullable()->references('uuid')->on('products')->onUpdate('CASCADE')->onDelete('CASCADE');
|
|
23
|
+
$table->timestamps();
|
|
24
|
+
$table->softDeletes();
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Reverse the migrations.
|
|
30
|
+
*/
|
|
31
|
+
public function down(): void
|
|
32
|
+
{
|
|
33
|
+
Schema::connection(config('storefront.connection.db'))->dropIfExists('catalog_category_products');
|
|
34
|
+
}
|
|
35
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
use Fleetbase\Support\Utils;
|
|
4
|
+
use Illuminate\Database\Migrations\Migration;
|
|
5
|
+
use Illuminate\Database\Query\Expression;
|
|
6
|
+
use Illuminate\Database\Schema\Blueprint;
|
|
7
|
+
use Illuminate\Support\Facades\Schema;
|
|
8
|
+
use Illuminate\Support\Str;
|
|
9
|
+
|
|
10
|
+
return new class extends Migration {
|
|
11
|
+
/**
|
|
12
|
+
* Run the migrations.
|
|
13
|
+
*/
|
|
14
|
+
public function up(): void
|
|
15
|
+
{
|
|
16
|
+
// If your main Fleetbase DB name is needed for references:
|
|
17
|
+
$databaseName = Utils::getFleetbaseDatabaseName();
|
|
18
|
+
|
|
19
|
+
Schema::connection(config('storefront.connection.db'))->create('food_trucks', function (Blueprint $table) use ($databaseName) {
|
|
20
|
+
$table->bigIncrements('id');
|
|
21
|
+
$table->uuid('uuid')->unique()->default(Str::uuid()->toString());
|
|
22
|
+
$table->string('public_id')->unique()->nullable();
|
|
23
|
+
$table->foreignUuid('vehicle_uuid')
|
|
24
|
+
->nullable()
|
|
25
|
+
->references('uuid')
|
|
26
|
+
->on(new Expression($databaseName . '.vehicles'))
|
|
27
|
+
->onUpdate('CASCADE')
|
|
28
|
+
->onDelete('SET NULL');
|
|
29
|
+
$table->foreignUuid('service_area_uuid')
|
|
30
|
+
->nullable()
|
|
31
|
+
->references('uuid')
|
|
32
|
+
->on(new Expression($databaseName . '.service_areas'))
|
|
33
|
+
->onUpdate('CASCADE')
|
|
34
|
+
->onDelete('SET NULL');
|
|
35
|
+
$table->foreignUuid('zone_uuid')
|
|
36
|
+
->nullable()
|
|
37
|
+
->references('uuid')
|
|
38
|
+
->on(new Expression($databaseName . '.zones'))
|
|
39
|
+
->onUpdate('CASCADE')
|
|
40
|
+
->onDelete('SET NULL');
|
|
41
|
+
$table->foreignUuid('store_uuid')
|
|
42
|
+
->nullable()
|
|
43
|
+
->references('uuid')
|
|
44
|
+
->on('stores')
|
|
45
|
+
->onUpdate('CASCADE')
|
|
46
|
+
->onDelete('SET NULL');
|
|
47
|
+
$table->foreignUuid('company_uuid')
|
|
48
|
+
->nullable()
|
|
49
|
+
->references('uuid')
|
|
50
|
+
->on(new Expression($databaseName . '.companies'))
|
|
51
|
+
->onUpdate('CASCADE')
|
|
52
|
+
->onDelete('SET NULL');
|
|
53
|
+
$table->foreignUuid('created_by_uuid')
|
|
54
|
+
->nullable()
|
|
55
|
+
->references('uuid')
|
|
56
|
+
->on(new Expression($databaseName . '.users'))
|
|
57
|
+
->onUpdate('CASCADE')
|
|
58
|
+
->onDelete('SET NULL');
|
|
59
|
+
$table->string('status')->default('inactive');
|
|
60
|
+
$table->timestamps();
|
|
61
|
+
$table->softDeletes();
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Reverse the migrations.
|
|
67
|
+
*/
|
|
68
|
+
public function down(): void
|
|
69
|
+
{
|
|
70
|
+
Schema::connection(config('storefront.connection.db'))->dropIfExists('food_trucks');
|
|
71
|
+
}
|
|
72
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
use Fleetbase\Support\Utils;
|
|
4
|
+
use Illuminate\Database\Migrations\Migration;
|
|
5
|
+
use Illuminate\Database\Query\Expression;
|
|
6
|
+
use Illuminate\Database\Schema\Blueprint;
|
|
7
|
+
use Illuminate\Support\Facades\Schema;
|
|
8
|
+
use Illuminate\Support\Str;
|
|
9
|
+
|
|
10
|
+
return new class extends Migration {
|
|
11
|
+
/**
|
|
12
|
+
* Run the migrations.
|
|
13
|
+
*/
|
|
14
|
+
public function up(): void
|
|
15
|
+
{
|
|
16
|
+
$databaseName = Utils::getFleetbaseDatabaseName();
|
|
17
|
+
|
|
18
|
+
Schema::connection(config('storefront.connection.db'))->create('catalog_subjects', function (Blueprint $table) use ($databaseName) {
|
|
19
|
+
$table->bigIncrements('id');
|
|
20
|
+
$table->uuid('uuid')->unique()->default(Str::uuid()->toString());
|
|
21
|
+
$table->foreignUuid('catalog_uuid')
|
|
22
|
+
->references('uuid')
|
|
23
|
+
->on('catalogs')
|
|
24
|
+
->onUpdate('CASCADE')
|
|
25
|
+
->onDelete('CASCADE');
|
|
26
|
+
$table->string('subject_type');
|
|
27
|
+
$table->uuid('subject_uuid');
|
|
28
|
+
$table->foreignUuid('company_uuid')
|
|
29
|
+
->nullable()
|
|
30
|
+
->references('uuid')
|
|
31
|
+
->on(new Expression($databaseName . '.companies'))
|
|
32
|
+
->onUpdate('CASCADE')
|
|
33
|
+
->onDelete('SET NULL');
|
|
34
|
+
|
|
35
|
+
$table->foreignUuid('created_by_uuid')
|
|
36
|
+
->nullable()
|
|
37
|
+
->references('uuid')
|
|
38
|
+
->on(new Expression($databaseName . '.users'))
|
|
39
|
+
->onUpdate('CASCADE')
|
|
40
|
+
->onDelete('SET NULL');
|
|
41
|
+
$table->timestamps();
|
|
42
|
+
$table->softDeletes();
|
|
43
|
+
$table->index(['subject_type', 'subject_uuid'], 'catalog_subject_idx');
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Reverse the migrations.
|
|
49
|
+
*/
|
|
50
|
+
public function down(): void
|
|
51
|
+
{
|
|
52
|
+
Schema::connection(config('storefront.connection.db'))->dropIfExists('catalog_subjects');
|
|
53
|
+
}
|
|
54
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
use Fleetbase\Support\Utils;
|
|
4
|
+
use Illuminate\Database\Migrations\Migration;
|
|
5
|
+
use Illuminate\Database\Schema\Blueprint;
|
|
6
|
+
use Illuminate\Support\Facades\Schema;
|
|
7
|
+
use Illuminate\Support\Str;
|
|
8
|
+
|
|
9
|
+
return new class extends Migration {
|
|
10
|
+
/**
|
|
11
|
+
* Run the migrations.
|
|
12
|
+
*/
|
|
13
|
+
public function up(): void
|
|
14
|
+
{
|
|
15
|
+
$databaseName = Utils::getFleetbaseDatabaseName();
|
|
16
|
+
|
|
17
|
+
Schema::connection(config('storefront.connection.db'))->create('catalog_hours', function (Blueprint $table) {
|
|
18
|
+
$table->bigIncrements('id');
|
|
19
|
+
$table->uuid('uuid')->unique()->default(Str::uuid()->toString());
|
|
20
|
+
$table->foreignUuid('catalog_uuid')
|
|
21
|
+
->references('uuid')->on('catalogs')
|
|
22
|
+
->onUpdate('CASCADE')
|
|
23
|
+
->onDelete('CASCADE');
|
|
24
|
+
$table->string('day_of_week');
|
|
25
|
+
$table->time('start')->nullable();
|
|
26
|
+
$table->time('end')->nullable();
|
|
27
|
+
$table->timestamps();
|
|
28
|
+
$table->softDeletes();
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Reverse the migrations.
|
|
34
|
+
*/
|
|
35
|
+
public function down(): void
|
|
36
|
+
{
|
|
37
|
+
Schema::connection(config('storefront.connection.db'))->dropIfExists('catalog_hours');
|
|
38
|
+
}
|
|
39
|
+
};
|
|
@@ -95,6 +95,22 @@ class Storefront
|
|
|
95
95
|
'name' => 'store-hour',
|
|
96
96
|
'actions' => [],
|
|
97
97
|
],
|
|
98
|
+
[
|
|
99
|
+
'name' => 'catalog',
|
|
100
|
+
'actions' => [],
|
|
101
|
+
],
|
|
102
|
+
[
|
|
103
|
+
'name' => 'catalog-category',
|
|
104
|
+
'actions' => [],
|
|
105
|
+
],
|
|
106
|
+
[
|
|
107
|
+
'name' => 'catalog-hour',
|
|
108
|
+
'actions' => [],
|
|
109
|
+
],
|
|
110
|
+
[
|
|
111
|
+
'name' => 'food-truck',
|
|
112
|
+
'actions' => [],
|
|
113
|
+
],
|
|
98
114
|
[
|
|
99
115
|
'name' => 'settings',
|
|
100
116
|
'action' => ['import'],
|
|
@@ -28,10 +28,20 @@ class PurgeExpiredCarts extends Command
|
|
|
28
28
|
*/
|
|
29
29
|
public function handle()
|
|
30
30
|
{
|
|
31
|
-
|
|
32
|
-
$dbDeletedCount = DB::table('carts')->where('expires_at', '<', now())->delete();
|
|
31
|
+
$dbConnection = DB::connection(config('storefront.connection.db'));
|
|
33
32
|
|
|
34
|
-
//
|
|
33
|
+
// Disable foreign key checks for the correct connection
|
|
34
|
+
$dbConnection->statement('SET FOREIGN_KEY_CHECKS=0;');
|
|
35
|
+
|
|
36
|
+
// Delete expired carts
|
|
37
|
+
$dbDeletedCount = $dbConnection->table('carts')
|
|
38
|
+
->where('expires_at', '<', now())
|
|
39
|
+
->delete();
|
|
40
|
+
|
|
41
|
+
// Re-enable foreign key checks
|
|
42
|
+
$dbConnection->statement('SET FOREIGN_KEY_CHECKS=1;');
|
|
43
|
+
|
|
44
|
+
// Log output
|
|
35
45
|
$this->info("Successfully deleted {$dbDeletedCount} expired carts.");
|
|
36
46
|
|
|
37
47
|
return Command::SUCCESS;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\Storefront\Http\Controllers\v1;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Http\Controllers\Controller;
|
|
6
|
+
use Fleetbase\Storefront\Models\Catalog;
|
|
7
|
+
use Illuminate\Http\Request;
|
|
8
|
+
|
|
9
|
+
class CatalogController extends Controller
|
|
10
|
+
{
|
|
11
|
+
/**
|
|
12
|
+
* Query for Food Truck resources.
|
|
13
|
+
*
|
|
14
|
+
* @return \Illuminate\Http\Response
|
|
15
|
+
*/
|
|
16
|
+
public function query(Request $request)
|
|
17
|
+
{
|
|
18
|
+
$limit = $request->input('limit', false);
|
|
19
|
+
$offset = $request->input('offset', false);
|
|
20
|
+
$results = [];
|
|
21
|
+
|
|
22
|
+
if (session('storefront_store')) {
|
|
23
|
+
$results = Catalog::queryWithRequest($request, function (&$query) use ($limit, $offset) {
|
|
24
|
+
$query->where('subject_uuid', session('storefront_store'));
|
|
25
|
+
|
|
26
|
+
if ($limit) {
|
|
27
|
+
$query->limit($limit);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if ($offset) {
|
|
31
|
+
$query->offset($offset);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return $results;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\Storefront\Http\Controllers\v1;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Http\Controllers\Controller;
|
|
6
|
+
use Fleetbase\Storefront\Http\Resources\FoodTruck as FoodTruckResource;
|
|
7
|
+
use Fleetbase\Storefront\Models\FoodTruck;
|
|
8
|
+
use Illuminate\Http\Request;
|
|
9
|
+
|
|
10
|
+
class FoodTruckController extends Controller
|
|
11
|
+
{
|
|
12
|
+
/**
|
|
13
|
+
* Query for Food Truck resources.
|
|
14
|
+
*
|
|
15
|
+
* @return \Illuminate\Http\Response
|
|
16
|
+
*/
|
|
17
|
+
public function query(Request $request)
|
|
18
|
+
{
|
|
19
|
+
$limit = $request->input('limit', false);
|
|
20
|
+
$offset = $request->input('offset', false);
|
|
21
|
+
$results = [];
|
|
22
|
+
|
|
23
|
+
if (session('storefront_store')) {
|
|
24
|
+
$results = FoodTruck::queryWithRequest($request, function (&$query) use ($limit, $offset) {
|
|
25
|
+
$query->where('store_uuid', session('storefront_store'));
|
|
26
|
+
|
|
27
|
+
if ($limit) {
|
|
28
|
+
$query->limit($limit);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if ($offset) {
|
|
32
|
+
$query->offset($offset);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return FoodTruckResource::collection($results);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\Storefront\Http\Controllers\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\FleetOps\Http\Resources\v1\DeletedResource;
|
|
5
6
|
use Fleetbase\Http\Controllers\Controller;
|
|
6
|
-
use Fleetbase\Http\Resources\v1\DeletedResource;
|
|
7
7
|
use Fleetbase\Models\Category;
|
|
8
8
|
use Fleetbase\Storefront\Http\Resources\Product as StorefrontProduct;
|
|
9
9
|
use Fleetbase\Storefront\Models\Product;
|
|
@@ -33,8 +33,8 @@ class ReviewController extends Controller
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
if (session('storefront_store')) {
|
|
36
|
-
$results = Review::queryWithRequest($request, function (&$query) use ($
|
|
37
|
-
$query->where('subject_uuid',
|
|
36
|
+
$results = Review::queryWithRequest($request, function (&$query) use ($limit, $offset) {
|
|
37
|
+
$query->where('subject_uuid', session('storefront_store'));
|
|
38
38
|
|
|
39
39
|
if ($limit) {
|
|
40
40
|
$query->limit($limit);
|
|
@@ -176,8 +176,10 @@ class ReviewController extends Controller
|
|
|
176
176
|
*/
|
|
177
177
|
public function create(CreateReviewRequest $request)
|
|
178
178
|
{
|
|
179
|
-
$customer
|
|
180
|
-
$about
|
|
179
|
+
$customer = Storefront::getCustomerFromToken();
|
|
180
|
+
$about = Storefront::about();
|
|
181
|
+
$disk = $request->input('disk', config('filesystems.default'));
|
|
182
|
+
$bucket = $request->input('bucket', config('filesystems.disks.' . $disk . '.bucket', config('filesystems.disks.s3.bucket')));
|
|
181
183
|
|
|
182
184
|
if (!$customer) {
|
|
183
185
|
return response()->error('Not authorized to create reviews');
|
|
@@ -209,7 +211,7 @@ class ReviewController extends Controller
|
|
|
209
211
|
$bucketPath = 'hyperstore/' . $about->public_id . '/review-photos/' . $review->uuid . '/' . File::randomFileName($extension);
|
|
210
212
|
|
|
211
213
|
// upload file to path
|
|
212
|
-
$upload = Storage::disk(
|
|
214
|
+
$upload = Storage::disk($disk)->put($bucketPath, base64_decode($data), 'public');
|
|
213
215
|
|
|
214
216
|
// create the file
|
|
215
217
|
$file = File::create([
|
|
@@ -222,7 +224,7 @@ class ReviewController extends Controller
|
|
|
222
224
|
'extension' => $extension,
|
|
223
225
|
'content_type' => $mimeType,
|
|
224
226
|
'path' => $bucketPath,
|
|
225
|
-
'bucket' =>
|
|
227
|
+
'bucket' => $bucket,
|
|
226
228
|
'type' => 'storefront_review_upload',
|
|
227
229
|
'size' => Utils::getBase64ImageSize($data),
|
|
228
230
|
]);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\Storefront\Http\Filter;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Http\Filter\OrderFilter as FleetOpsOrderFilter;
|
|
6
|
+
use Fleetbase\FleetOps\Models\ServiceArea;
|
|
7
|
+
|
|
8
|
+
class FoodTruckFilter extends FleetOpsOrderFilter
|
|
9
|
+
{
|
|
10
|
+
public function queryForInternal()
|
|
11
|
+
{
|
|
12
|
+
$this->builder->where('company_uuid', $this->session->get('company'));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public function storefront($storefront)
|
|
16
|
+
{
|
|
17
|
+
$this->builder->whereHas(
|
|
18
|
+
'store',
|
|
19
|
+
function ($query) use ($storefront) {
|
|
20
|
+
$query->where('public_id', $storefront);
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public function serviceArea(string $serviceAreaId)
|
|
26
|
+
{
|
|
27
|
+
$matchingServiceAreaIds = ServiceArea::on(config('fleetbase.connection.db'))
|
|
28
|
+
->where(function ($query) use ($serviceAreaId) {
|
|
29
|
+
$query->where('public_id', $serviceAreaId)
|
|
30
|
+
->orWhere('uuid', $serviceAreaId);
|
|
31
|
+
})
|
|
32
|
+
->pluck('uuid')
|
|
33
|
+
->toArray();
|
|
34
|
+
|
|
35
|
+
$this->builder->whereIn('service_area_uuid', $matchingServiceAreaIds);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\Storefront\Http\Resources;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
6
|
+
use Fleetbase\Support\Http;
|
|
7
|
+
|
|
8
|
+
class Catalog extends FleetbaseResource
|
|
9
|
+
{
|
|
10
|
+
/**
|
|
11
|
+
* Transform the resource into an array.
|
|
12
|
+
*
|
|
13
|
+
* @param \Illuminate\Http\Request $request
|
|
14
|
+
*
|
|
15
|
+
* @return array
|
|
16
|
+
*/
|
|
17
|
+
public function toArray($request)
|
|
18
|
+
{
|
|
19
|
+
return [
|
|
20
|
+
'id' => $this->when(Http::isInternalRequest(), $this->id, $this->public_id),
|
|
21
|
+
'uuid' => $this->when(Http::isInternalRequest(), $this->uuid),
|
|
22
|
+
'public_id' => $this->when(Http::isInternalRequest(), $this->public_id),
|
|
23
|
+
'company_uuid' => $this->when(Http::isInternalRequest(), $this->company_uuid),
|
|
24
|
+
'created_by_uuid' => $this->when(Http::isInternalRequest(), $this->created_by_uuid),
|
|
25
|
+
'store_uuid' => $this->when(Http::isInternalRequest(), $this->store_uuid),
|
|
26
|
+
'name' => $this->name,
|
|
27
|
+
'description' => $this->description,
|
|
28
|
+
'categories' => CatalogCategory::collection($this->categories ?? []),
|
|
29
|
+
'status' => $this->status,
|
|
30
|
+
'created_at' => $this->created_at,
|
|
31
|
+
'updated_at' => $this->updated_at,
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\Storefront\Http\Resources;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
6
|
+
use Fleetbase\Support\Http;
|
|
7
|
+
|
|
8
|
+
class CatalogCategory extends FleetbaseResource
|
|
9
|
+
{
|
|
10
|
+
/**
|
|
11
|
+
* Transform the resource into an array.
|
|
12
|
+
*
|
|
13
|
+
* @param \Illuminate\Http\Request $request
|
|
14
|
+
*
|
|
15
|
+
* @return array
|
|
16
|
+
*/
|
|
17
|
+
public function toArray($request)
|
|
18
|
+
{
|
|
19
|
+
return [
|
|
20
|
+
'id' => $this->when(Http::isInternalRequest(), $this->id, $this->public_id),
|
|
21
|
+
'uuid' => $this->when(Http::isInternalRequest(), $this->uuid),
|
|
22
|
+
'public_id' => $this->when(Http::isInternalRequest(), $this->public_id),
|
|
23
|
+
'company_uuid' => $this->when(Http::isInternalRequest(), $this->company_uuid),
|
|
24
|
+
'parent_uuid' => $this->when(Http::isInternalRequest(), $this->parent_uuid),
|
|
25
|
+
'store_uuid' => $this->when(Http::isInternalRequest(), $this->store_uuid),
|
|
26
|
+
'owner_uuid' => $this->when(Http::isInternalRequest(), $this->owner_uuid),
|
|
27
|
+
'name' => $this->name,
|
|
28
|
+
'description' => $this->description,
|
|
29
|
+
'tags' => $this->tags ?? [],
|
|
30
|
+
'meta' => $this->meta ?? [],
|
|
31
|
+
'products' => CatalogProduct::collection($this->products ?? []),
|
|
32
|
+
'for' => $this->for,
|
|
33
|
+
'order' => $this->order,
|
|
34
|
+
'created_at' => $this->created_at,
|
|
35
|
+
'updated_at' => $this->updated_at,
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\Storefront\Http\Resources;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Support\Http;
|
|
6
|
+
|
|
7
|
+
class CatalogProduct extends Product
|
|
8
|
+
{
|
|
9
|
+
/**
|
|
10
|
+
* Transform the resource into an array.
|
|
11
|
+
*
|
|
12
|
+
* @param \Illuminate\Http\Request $request
|
|
13
|
+
*
|
|
14
|
+
* @return array
|
|
15
|
+
*/
|
|
16
|
+
public function toArray($request)
|
|
17
|
+
{
|
|
18
|
+
return [
|
|
19
|
+
'id' => $this->when(Http::isInternalRequest(), $this->id, $this->public_id),
|
|
20
|
+
'uuid' => $this->when(Http::isInternalRequest(), $this->uuid),
|
|
21
|
+
'public_id' => $this->when(Http::isInternalRequest(), $this->public_id),
|
|
22
|
+
'company_uuid' => $this->when(Http::isInternalRequest(), $this->company_uuid),
|
|
23
|
+
'store_uuid' => $this->when(Http::isInternalRequest(), $this->store_uuid),
|
|
24
|
+
'category_uuid' => $this->when(Http::isInternalRequest(), $this->category_uuid),
|
|
25
|
+
'created_by_uuid' => $this->when(Http::isInternalRequest(), $this->created_by_uuid),
|
|
26
|
+
'primary_image_uuid' => $this->when(Http::isInternalRequest(), $this->primary_image_uuid),
|
|
27
|
+
'name' => $this->name,
|
|
28
|
+
'description' => $this->description,
|
|
29
|
+
'sku' => $this->sku,
|
|
30
|
+
'primary_image_url' => $this->primary_image_url,
|
|
31
|
+
'price' => $this->price,
|
|
32
|
+
'sale_price' => $this->sale_price,
|
|
33
|
+
'currency' => $this->currency,
|
|
34
|
+
'is_on_sale' => $this->is_on_sale,
|
|
35
|
+
'is_recommended' => $this->is_recommended,
|
|
36
|
+
'is_service' => $this->is_service,
|
|
37
|
+
'is_bookable' => $this->is_bookable,
|
|
38
|
+
'is_available' => $this->is_available,
|
|
39
|
+
'tags' => $this->tags ?? [],
|
|
40
|
+
'status' => $this->status,
|
|
41
|
+
'slug' => $this->slug,
|
|
42
|
+
'translations' => $this->translations ?? [],
|
|
43
|
+
'addon_categories' => $this->mapAddonCategories($this->addonCategories),
|
|
44
|
+
'variants' => $this->mapVariants($this->variants),
|
|
45
|
+
'files' => $this->when(Http::isInternalRequest(), $this->files),
|
|
46
|
+
'images' => $this->when(!Http::isInternalRequest(), $this->mapFiles($this->files)),
|
|
47
|
+
'videos' => $this->when(!Http::isInternalRequest(), $this->mapFiles($this->files, 'video')),
|
|
48
|
+
'hours' => $this->mapHours($this->hours),
|
|
49
|
+
'youtube_urls' => $this->youtube_urls ?? [],
|
|
50
|
+
'created_at' => $this->created_at,
|
|
51
|
+
'updated_at' => $this->updated_at,
|
|
52
|
+
'type' => $this->when(Http::isInternalRequest(), 'product'),
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
}
|