@fleetbase/registry-bridge-engine 0.0.1
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 +651 -0
- package/README.md +122 -0
- package/addon/adapters/registry-bridge.js +5 -0
- package/addon/adapters/registry-extension-bundle.js +1 -0
- package/addon/adapters/registry-extension.js +1 -0
- package/addon/components/extension-card.hbs +12 -0
- package/addon/components/extension-card.js +235 -0
- package/addon/components/extension-form.hbs +237 -0
- package/addon/components/extension-form.js +123 -0
- package/addon/components/extension-modal-title.hbs +14 -0
- package/addon/components/extension-modal-title.js +20 -0
- package/addon/components/extension-monetize-form.hbs +56 -0
- package/addon/components/extension-monetize-form.js +7 -0
- package/addon/components/extension-pending-publish-viewer.hbs +52 -0
- package/addon/components/extension-pending-publish-viewer.js +37 -0
- package/addon/components/extension-reviewer-control.hbs +68 -0
- package/addon/components/extension-reviewer-control.js +68 -0
- package/addon/components/modals/confirm-extension-purchase.hbs +5 -0
- package/addon/components/modals/confirm-extension-purchase.js +3 -0
- package/addon/components/modals/extension-details.hbs +69 -0
- package/addon/components/modals/extension-details.js +33 -0
- package/addon/components/modals/extension-purchase-form.hbs +5 -0
- package/addon/components/modals/extension-purchase-form.js +3 -0
- package/addon/components/modals/extension-uninstall.hbs +25 -0
- package/addon/components/modals/extension-uninstall.js +11 -0
- package/addon/components/modals/select-extension-bundle.hbs +43 -0
- package/addon/components/modals/select-extension-bundle.js +31 -0
- package/addon/components/progress-bar.hbs +12 -0
- package/addon/components/progress-bar.js +8 -0
- package/addon/controllers/application.js +6 -0
- package/addon/controllers/developers/analytics.js +26 -0
- package/addon/controllers/developers/extensions/edit/bundles.js +70 -0
- package/addon/controllers/developers/extensions/edit/index.js +3 -0
- package/addon/controllers/developers/extensions/edit/monetize.js +7 -0
- package/addon/controllers/developers/extensions/edit.js +107 -0
- package/addon/controllers/developers/extensions/index.js +3 -0
- package/addon/controllers/developers/extensions/new.js +32 -0
- package/addon/controllers/developers/payments/index.js +39 -0
- package/addon/controllers/developers/payments/onboard.js +67 -0
- package/addon/controllers/explore/category.js +22 -0
- package/addon/controllers/explore/index.js +15 -0
- package/addon/controllers/installed.js +86 -0
- package/addon/controllers/purchased.js +18 -0
- package/addon/engine.js +44 -0
- package/addon/models/registry-extension-bundle.js +62 -0
- package/addon/models/registry-extension.js +215 -0
- package/addon/routes/application.js +12 -0
- package/addon/routes/developers/analytics.js +10 -0
- package/addon/routes/developers/credentials.js +3 -0
- package/addon/routes/developers/extensions/edit/bundles.js +21 -0
- package/addon/routes/developers/extensions/edit/details.js +3 -0
- package/addon/routes/developers/extensions/edit/index.js +3 -0
- package/addon/routes/developers/extensions/edit/monetize.js +3 -0
- package/addon/routes/developers/extensions/edit.js +18 -0
- package/addon/routes/developers/extensions/index.js +10 -0
- package/addon/routes/developers/extensions/new.js +3 -0
- package/addon/routes/developers/extensions.js +3 -0
- package/addon/routes/developers/payments/index.js +26 -0
- package/addon/routes/developers/payments/onboard.js +21 -0
- package/addon/routes/developers/payments.js +3 -0
- package/addon/routes/developers.js +3 -0
- package/addon/routes/explore/category.js +27 -0
- package/addon/routes/explore/index.js +17 -0
- package/addon/routes/explore.js +3 -0
- package/addon/routes/installed.js +10 -0
- package/addon/routes/purchased.js +10 -0
- package/addon/routes.js +28 -0
- package/addon/serializers/registry-extension-bundle.js +15 -0
- package/addon/serializers/registry-extension.js +21 -0
- package/addon/services/stripe.js +83 -0
- package/addon/styles/registry-bridge-engine.css +142 -0
- package/addon/templates/application.hbs +26 -0
- package/addon/templates/developers/analytics.hbs +83 -0
- package/addon/templates/developers/credentials.hbs +1 -0
- package/addon/templates/developers/extensions/edit/bundles.hbs +71 -0
- package/addon/templates/developers/extensions/edit/details.hbs +16 -0
- package/addon/templates/developers/extensions/edit/index.hbs +1 -0
- package/addon/templates/developers/extensions/edit/monetize.hbs +3 -0
- package/addon/templates/developers/extensions/edit.hbs +48 -0
- package/addon/templates/developers/extensions/index.hbs +27 -0
- package/addon/templates/developers/extensions/new.hbs +39 -0
- package/addon/templates/developers/extensions.hbs +1 -0
- package/addon/templates/developers/payments/index.hbs +33 -0
- package/addon/templates/developers/payments/onboard.hbs +48 -0
- package/addon/templates/developers/payments.hbs +1 -0
- package/addon/templates/developers.hbs +1 -0
- package/addon/templates/explore/category.hbs +12 -0
- package/addon/templates/explore/index.hbs +12 -0
- package/addon/templates/explore.hbs +1 -0
- package/addon/templates/installed.hbs +32 -0
- package/addon/templates/purchased.hbs +34 -0
- package/app/adapters/registry-bridge.js +1 -0
- package/app/adapters/registry-extension-bundle.js +1 -0
- package/app/adapters/registry-extension.js +1 -0
- package/app/components/extension-card.js +1 -0
- package/app/components/extension-form.js +1 -0
- package/app/components/extension-modal-title.js +1 -0
- package/app/components/extension-monetize-form.js +1 -0
- package/app/components/extension-pending-publish-viewer.js +1 -0
- package/app/components/extension-reviewer-control.js +1 -0
- package/app/components/modals/confirm-extension-purchase.js +1 -0
- package/app/components/modals/extension-details.js +1 -0
- package/app/components/modals/extension-purchase-form.js +1 -0
- package/app/components/modals/extension-uninstall.js +1 -0
- package/app/components/modals/select-extension-bundle.js +1 -0
- package/app/components/progress-bar.js +1 -0
- package/app/controllers/application.js +1 -0
- package/app/controllers/developers/analytics.js +1 -0
- package/app/controllers/developers/extensions/edit/bundles.js +1 -0
- package/app/controllers/developers/extensions/edit/index.js +1 -0
- package/app/controllers/developers/extensions/edit/monetize.js +1 -0
- package/app/controllers/developers/extensions/edit.js +1 -0
- package/app/controllers/developers/extensions/index.js +1 -0
- package/app/controllers/developers/extensions/new.js +1 -0
- package/app/controllers/developers/payments/index.js +1 -0
- package/app/controllers/developers/payments/onboard.js +1 -0
- package/app/controllers/explore/category.js +1 -0
- package/app/controllers/explore/index.js +1 -0
- package/app/controllers/installed.js +1 -0
- package/app/controllers/purchased.js +1 -0
- package/app/models/registry-extension-bundle.js +1 -0
- package/app/models/registry-extension.js +1 -0
- package/app/routes/developers/analytics.js +1 -0
- package/app/routes/developers/credentials.js +1 -0
- package/app/routes/developers/extensions/edit/bundles.js +1 -0
- package/app/routes/developers/extensions/edit/details.js +1 -0
- package/app/routes/developers/extensions/edit/index.js +1 -0
- package/app/routes/developers/extensions/edit/monetize.js +1 -0
- package/app/routes/developers/extensions/edit.js +1 -0
- package/app/routes/developers/extensions/index.js +1 -0
- package/app/routes/developers/extensions/new.js +1 -0
- package/app/routes/developers/extensions.js +1 -0
- package/app/routes/developers/payments/index.js +1 -0
- package/app/routes/developers/payments/onboard.js +1 -0
- package/app/routes/developers/payments.js +1 -0
- package/app/routes/developers.js +1 -0
- package/app/routes/explore/category.js +1 -0
- package/app/routes/explore/index.js +1 -0
- package/app/routes/explore.js +1 -0
- package/app/routes/installed.js +1 -0
- package/app/routes/purchased.js +1 -0
- package/app/serializers/registry-extension-bundle.js +1 -0
- package/app/serializers/registry-extension.js +1 -0
- package/app/services/stripe.js +1 -0
- package/app/templates/developers/analytics.js +1 -0
- package/app/templates/developers/credentials.js +1 -0
- package/app/templates/developers/extensions/edit/bundles.js +1 -0
- package/app/templates/developers/extensions/edit/details.js +1 -0
- package/app/templates/developers/extensions/edit/index.js +1 -0
- package/app/templates/developers/extensions/edit/monetize.js +1 -0
- package/app/templates/developers/extensions/edit.js +1 -0
- package/app/templates/developers/extensions/index.js +1 -0
- package/app/templates/developers/extensions/new.js +1 -0
- package/app/templates/developers/extensions.js +1 -0
- package/app/templates/developers/payments/index.js +1 -0
- package/app/templates/developers/payments/onboard.js +1 -0
- package/app/templates/developers/payments.js +1 -0
- package/app/templates/developers.js +1 -0
- package/app/templates/explore/category.js +1 -0
- package/app/templates/explore/index.js +1 -0
- package/app/templates/explore.js +1 -0
- package/app/templates/installed.js +1 -0
- package/app/templates/purchased.js +1 -0
- package/composer.json +95 -0
- package/config/environment.js +28 -0
- package/extension.json +10 -0
- package/index.js +26 -0
- package/package.json +129 -0
- package/phpstan.neon.dist +8 -0
- package/phpunit.xml.dist +16 -0
- package/server/.gitattributes +14 -0
- package/server/config/registry-bridge.php +32 -0
- package/server/migrations/2024_03_19_060627_create_registry_users_table.php +42 -0
- package/server/migrations/2024_03_21_051614_create_registry_extensions_table.php +76 -0
- package/server/migrations/2024_03_25_044537_create_registry_extension_bundles_table.php +54 -0
- package/server/migrations/2024_03_29_072101_registry_extension_installs.php +35 -0
- package/server/migrations/2024_07_16_155000_create_registry_extension_purchases.php +41 -0
- package/server/seeders/ExtensionsCategorySeeder.php +359 -0
- package/server/src/Console/Commands/Initialize.php +35 -0
- package/server/src/Console/Commands/PostInstallExtension.php +84 -0
- package/server/src/Exceptions/InstallFailedException.php +21 -0
- package/server/src/Expansions/CategoryExpansion.php +30 -0
- package/server/src/Http/Controllers/Internal/v1/ExtensionInstallerController.php +153 -0
- package/server/src/Http/Controllers/Internal/v1/RegistryAuthController.php +230 -0
- package/server/src/Http/Controllers/Internal/v1/RegistryController.php +54 -0
- package/server/src/Http/Controllers/Internal/v1/RegistryExtensionBundleController.php +112 -0
- package/server/src/Http/Controllers/Internal/v1/RegistryExtensionController.php +257 -0
- package/server/src/Http/Controllers/Internal/v1/RegistryPaymentsController.php +227 -0
- package/server/src/Http/Controllers/RegistryBridgeController.php +13 -0
- package/server/src/Http/Filter/RegistryExtensionFilter.php +80 -0
- package/server/src/Http/Requests/AddRegistryUserRequest.php +47 -0
- package/server/src/Http/Requests/AuthenticateRegistryUserRequest.php +47 -0
- package/server/src/Http/Requests/CreateRegistryExtensionBundleRequest.php +42 -0
- package/server/src/Http/Requests/CreateRegistryExtensionRequest.php +31 -0
- package/server/src/Http/Requests/InstallExtensionRequest.php +30 -0
- package/server/src/Http/Requests/RegistryAuthRequest.php +46 -0
- package/server/src/Http/Requests/RegistryExtensionActionRequest.php +30 -0
- package/server/src/Http/Resources/RegistryUser.php +40 -0
- package/server/src/Models/RegistryExtension.php +656 -0
- package/server/src/Models/RegistryExtensionBundle.php +1015 -0
- package/server/src/Models/RegistryExtensionInstall.php +76 -0
- package/server/src/Models/RegistryExtensionPurchase.php +87 -0
- package/server/src/Models/RegistryUser.php +140 -0
- package/server/src/Providers/RegistryBridgeServiceProvider.php +117 -0
- package/server/src/Support/Bridge.php +53 -0
- package/server/src/Support/Utils.php +19 -0
- package/server/src/routes.php +58 -0
- package/server/tests/Feature.php +5 -0
- package/translations/en-us.yaml +119 -0
- package/tsconfig.declarations.json +10 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* -------------------------------------------
|
|
5
|
+
* Fleetbase Core API Configuration
|
|
6
|
+
* -------------------------------------------
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
use Fleetbase\Support\Utils;
|
|
10
|
+
|
|
11
|
+
return [
|
|
12
|
+
'api' => [
|
|
13
|
+
'version' => '0.0.1',
|
|
14
|
+
'routing' => [
|
|
15
|
+
'prefix' => '~registry',
|
|
16
|
+
'internal_prefix' => 'v1'
|
|
17
|
+
],
|
|
18
|
+
],
|
|
19
|
+
'registry' => [
|
|
20
|
+
'host' => env('REGISTRY_HOST', 'https://registry.fleetbase.io'),
|
|
21
|
+
'token' => env('REGISTRY_TOKEN', env('REGISTRY_AUTH_TOKEN'))
|
|
22
|
+
],
|
|
23
|
+
'stripe' => [
|
|
24
|
+
'key' => env('STRIPE_KEY', env('STRIPE_API_KEY')),
|
|
25
|
+
'secret' => env('STRIPE_SECRET', env('STRIPE_API_SECRET')),
|
|
26
|
+
'webhook_secret' => env('STRIPE_WEBHOOK_SECRET'),
|
|
27
|
+
],
|
|
28
|
+
'extensions' => [
|
|
29
|
+
'preinstalled' => Utils::castBoolean(env('REGISTRY_PREINSTALLED_EXTENSIONS', false))
|
|
30
|
+
],
|
|
31
|
+
'facilitator_fee' => env('REGISTRY_FACILITATOR_FEE', 10)
|
|
32
|
+
];
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
public function up(): void
|
|
13
|
+
{
|
|
14
|
+
Schema::create('registry_users', function (Blueprint $table) {
|
|
15
|
+
$table->increments('id');
|
|
16
|
+
$table->uuid('uuid')->index();
|
|
17
|
+
$table->uuid('company_uuid');
|
|
18
|
+
$table->uuid('user_uuid');
|
|
19
|
+
$table->string('public_id')->nullable()->index();
|
|
20
|
+
$table->string('token');
|
|
21
|
+
$table->string('scope')->nullable();
|
|
22
|
+
$table->timestamp('expires_at')->nullable();
|
|
23
|
+
$table->timestamp('last_used_at')->nullable();
|
|
24
|
+
$table->string('name')->nullable();
|
|
25
|
+
$table->json('meta')->nullable();
|
|
26
|
+
$table->boolean('revoked')->default(false);
|
|
27
|
+
$table->timestamps();
|
|
28
|
+
$table->softDeletes();
|
|
29
|
+
|
|
30
|
+
$table->foreign('company_uuid')->references('uuid')->on('companies')->onDelete('cascade');
|
|
31
|
+
$table->foreign('user_uuid')->references('uuid')->on('users')->onDelete('cascade');
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Reverse the migrations.
|
|
37
|
+
*/
|
|
38
|
+
public function down(): void
|
|
39
|
+
{
|
|
40
|
+
Schema::dropIfExists('registry_users');
|
|
41
|
+
}
|
|
42
|
+
};
|
|
@@ -0,0 +1,76 @@
|
|
|
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
|
+
public function up(): void
|
|
13
|
+
{
|
|
14
|
+
Schema::create('registry_extensions', function (Blueprint $table) {
|
|
15
|
+
$table->increments('id');
|
|
16
|
+
$table->uuid('uuid')->index();
|
|
17
|
+
$table->uuid('company_uuid');
|
|
18
|
+
$table->uuid('created_by_uuid')->nullable();
|
|
19
|
+
$table->uuid('registry_user_uuid')->nullable();
|
|
20
|
+
$table->uuid('current_bundle_uuid')->nullable();
|
|
21
|
+
$table->uuid('next_bundle_uuid')->nullable();
|
|
22
|
+
$table->uuid('icon_uuid')->nullable();
|
|
23
|
+
$table->uuid('category_uuid')->nullable();
|
|
24
|
+
$table->string('public_id')->nullable()->index();
|
|
25
|
+
$table->string('stripe_product_id')->nullable();
|
|
26
|
+
$table->string('name');
|
|
27
|
+
$table->string('subtitle')->nullable();
|
|
28
|
+
$table->boolean('payment_required')->default(0);
|
|
29
|
+
$table->integer('price')->nullable();
|
|
30
|
+
$table->integer('sale_price')->nullable();
|
|
31
|
+
$table->boolean('on_sale')->default(0);
|
|
32
|
+
$table->boolean('subscription_required')->default(0);
|
|
33
|
+
$table->string('subscription_billing_period')->nullable();
|
|
34
|
+
$table->string('subscription_model')->nullable(); // flat_rate, usage, tiered
|
|
35
|
+
$table->integer('subscription_amount')->nullable();
|
|
36
|
+
$table->json('subscription_tiers')->nullable(); // [{ first: 1, last: 5, per_unit: 100, flat_fee: 0 }]
|
|
37
|
+
$table->string('currency')->default('USD');
|
|
38
|
+
$table->string('slug');
|
|
39
|
+
$table->string('version')->nullable();
|
|
40
|
+
$table->string('fa_icon')->nullable();
|
|
41
|
+
$table->mediumText('description')->nullable();
|
|
42
|
+
$table->mediumText('promotional_text')->nullable();
|
|
43
|
+
$table->string('website_url')->nullable();
|
|
44
|
+
$table->string('repo_url')->nullable();
|
|
45
|
+
$table->string('support_url')->nullable();
|
|
46
|
+
$table->string('privacy_policy_url')->nullable();
|
|
47
|
+
$table->string('tos_url')->nullable();
|
|
48
|
+
$table->string('copyright')->nullable();
|
|
49
|
+
$table->string('primary_language')->nullable();
|
|
50
|
+
$table->json('tags')->nullable();
|
|
51
|
+
$table->json('languages')->nullable();
|
|
52
|
+
$table->json('meta')->nullable();
|
|
53
|
+
$table->boolean('core_extension')->default(0);
|
|
54
|
+
$table->string('status')->default('pending'); // pending, in_review, rejected, published
|
|
55
|
+
$table->timestamp('published_at')->nullable();
|
|
56
|
+
$table->timestamp('accepted_at')->nullable();
|
|
57
|
+
$table->timestamp('rejected_at')->nullable();
|
|
58
|
+
$table->timestamps();
|
|
59
|
+
$table->softDeletes();
|
|
60
|
+
|
|
61
|
+
$table->foreign('company_uuid')->references('uuid')->on('companies')->onDelete('cascade');
|
|
62
|
+
$table->foreign('created_by_uuid')->references('uuid')->on('users')->onDelete('cascade');
|
|
63
|
+
$table->foreign('registry_user_uuid')->references('uuid')->on('registry_users')->onDelete('cascade');
|
|
64
|
+
$table->foreign('icon_uuid')->references('uuid')->on('files')->onDelete('cascade');
|
|
65
|
+
$table->foreign('category_uuid')->references('uuid')->on('categories')->onDelete('cascade');
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Reverse the migrations.
|
|
71
|
+
*/
|
|
72
|
+
public function down(): void
|
|
73
|
+
{
|
|
74
|
+
Schema::dropIfExists('registry_extensions');
|
|
75
|
+
}
|
|
76
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
public function up(): void
|
|
13
|
+
{
|
|
14
|
+
Schema::create('registry_extension_bundles', function (Blueprint $table) {
|
|
15
|
+
$table->increments('id');
|
|
16
|
+
$table->uuid('uuid')->index();
|
|
17
|
+
$table->uuid('public_id')->index();
|
|
18
|
+
$table->uuid('bundle_id')->index();
|
|
19
|
+
$table->uuid('company_uuid');
|
|
20
|
+
$table->uuid('created_by_uuid')->nullable();
|
|
21
|
+
$table->uuid('extension_uuid')->nullable();
|
|
22
|
+
$table->uuid('bundle_uuid')->nullable();
|
|
23
|
+
$table->string('bundle_number')->nullable();
|
|
24
|
+
$table->string('version')->nullable();
|
|
25
|
+
$table->string('status')->default('pending'); // pending -> in_review -> approved
|
|
26
|
+
$table->json('meta')->nullable();
|
|
27
|
+
$table->timestamps();
|
|
28
|
+
$table->softDeletes();
|
|
29
|
+
|
|
30
|
+
$table->foreign('company_uuid')->references('uuid')->on('companies')->onDelete('cascade');
|
|
31
|
+
$table->foreign('created_by_uuid')->references('uuid')->on('users')->onDelete('cascade');
|
|
32
|
+
$table->foreign('extension_uuid')->references('uuid')->on('registry_extensions')->onDelete('cascade');
|
|
33
|
+
$table->foreign('bundle_uuid')->references('uuid')->on('files')->onDelete('cascade');
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
Schema::table('registry_extensions', function (Blueprint $table) {
|
|
37
|
+
$table->foreign('current_bundle_uuid')->references('uuid')->on('registry_extension_bundles')->onDelete('cascade');
|
|
38
|
+
$table->foreign('next_bundle_uuid')->references('uuid')->on('registry_extension_bundles')->onDelete('cascade');
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Reverse the migrations.
|
|
44
|
+
*/
|
|
45
|
+
public function down(): void
|
|
46
|
+
{
|
|
47
|
+
Schema::table('registry_extensions', function (Blueprint $table) {
|
|
48
|
+
$table->dropForeign(['current_bundle_uuid']);
|
|
49
|
+
$table->dropForeign(['next_bundle_uuid']);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
Schema::dropIfExists('registry_extension_bundles');
|
|
53
|
+
}
|
|
54
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
public function up(): void
|
|
13
|
+
{
|
|
14
|
+
Schema::create('registry_extension_installs', function (Blueprint $table) {
|
|
15
|
+
$table->increments('id');
|
|
16
|
+
$table->uuid('uuid')->index();
|
|
17
|
+
$table->uuid('company_uuid');
|
|
18
|
+
$table->uuid('extension_uuid');
|
|
19
|
+
$table->json('meta')->nullable();
|
|
20
|
+
$table->timestamps();
|
|
21
|
+
$table->softDeletes();
|
|
22
|
+
|
|
23
|
+
$table->foreign('company_uuid')->references('uuid')->on('companies')->onDelete('cascade');
|
|
24
|
+
$table->foreign('extension_uuid')->references('uuid')->on('registry_extensions')->onDelete('cascade');
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Reverse the migrations.
|
|
30
|
+
*/
|
|
31
|
+
public function down(): void
|
|
32
|
+
{
|
|
33
|
+
Schema::dropIfExists('registry_extension_installs');
|
|
34
|
+
}
|
|
35
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
public function up(): void
|
|
13
|
+
{
|
|
14
|
+
Schema::create('registry_extension_purchases', function (Blueprint $table) {
|
|
15
|
+
$table->increments('id');
|
|
16
|
+
$table->uuid('uuid')->index();
|
|
17
|
+
$table->uuid('company_uuid');
|
|
18
|
+
$table->uuid('extension_uuid');
|
|
19
|
+
$table->string('stripe_checkout_session_id')->nullable();
|
|
20
|
+
$table->string('stripe_payment_intent_id')->nullable();
|
|
21
|
+
$table->boolean('is_subcription')->default(0);
|
|
22
|
+
$table->integer('locked_price')->nullable();
|
|
23
|
+
$table->string('subscription_billing_period')->nullable();
|
|
24
|
+
$table->string('subscription_model')->nullable(); // flat_rate, usage, tiered
|
|
25
|
+
$table->json('meta')->nullable();
|
|
26
|
+
$table->timestamps();
|
|
27
|
+
$table->softDeletes();
|
|
28
|
+
|
|
29
|
+
$table->foreign('company_uuid')->references('uuid')->on('companies')->onDelete('cascade');
|
|
30
|
+
$table->foreign('extension_uuid')->references('uuid')->on('registry_extensions')->onDelete('cascade');
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Reverse the migrations.
|
|
36
|
+
*/
|
|
37
|
+
public function down(): void
|
|
38
|
+
{
|
|
39
|
+
Schema::dropIfExists('registry_extension_purchases');
|
|
40
|
+
}
|
|
41
|
+
};
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\RegistryBridge\Seeders;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Models\Category;
|
|
6
|
+
use Illuminate\Database\Seeder;
|
|
7
|
+
|
|
8
|
+
class ExtensionsCategorySeeder extends Seeder
|
|
9
|
+
{
|
|
10
|
+
/**
|
|
11
|
+
* Run the database seeds.
|
|
12
|
+
*
|
|
13
|
+
* @return void
|
|
14
|
+
*/
|
|
15
|
+
public function run()
|
|
16
|
+
{
|
|
17
|
+
$categories = [
|
|
18
|
+
[
|
|
19
|
+
'name' => 'Telematics',
|
|
20
|
+
'description' => 'Advanced tracking and diagnostics for vehicle fleets, including real-time data and analytics.',
|
|
21
|
+
'internal_id' => 'FLBTELEMATICS',
|
|
22
|
+
'icon' => 'satellite-dish',
|
|
23
|
+
'tags' => ['tracking', 'diagnostics', 'real-time', 'analytics'],
|
|
24
|
+
'for' => 'extension_category'
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
'name' => 'Inventory',
|
|
28
|
+
'description' => 'Tools for inventory management, stock control, and supply chain visibility.',
|
|
29
|
+
'internal_id' => 'FLBINVENTORY',
|
|
30
|
+
'icon' => 'boxes-packing',
|
|
31
|
+
'tags' => ['management', 'stock', 'supply chain'],
|
|
32
|
+
'for' => 'extension_category'
|
|
33
|
+
],
|
|
34
|
+
[
|
|
35
|
+
'name' => 'Accounting',
|
|
36
|
+
'description' => 'Financial management solutions including invoicing, expense tracking, and financial reporting.',
|
|
37
|
+
'internal_id' => 'FLBACCOUNTING',
|
|
38
|
+
'icon' => 'cash-register',
|
|
39
|
+
'tags' => ['finance', 'invoicing', 'expenses', 'reporting'],
|
|
40
|
+
'for' => 'extension_category'
|
|
41
|
+
],
|
|
42
|
+
[
|
|
43
|
+
'name' => 'Route Optimization',
|
|
44
|
+
'description' => 'Enhancements for efficient route planning and optimization to reduce travel time and costs.',
|
|
45
|
+
'internal_id' => 'FLBROUTE',
|
|
46
|
+
'icon' => 'route',
|
|
47
|
+
'tags' => ['route', 'planning', 'optimization', 'GPS', 'mapping'],
|
|
48
|
+
'for' => 'extension_category'
|
|
49
|
+
],
|
|
50
|
+
[
|
|
51
|
+
'name' => 'Fleet Management',
|
|
52
|
+
'description' => 'Tools for managing fleet vehicles, including maintenance, tracking, and performance analysis.',
|
|
53
|
+
'internal_id' => 'FLBFLEET',
|
|
54
|
+
'icon' => 'truck-moving',
|
|
55
|
+
'tags' => ['vehicles', 'maintenance', 'tracking', 'analytics'],
|
|
56
|
+
'for' => 'extension_category'
|
|
57
|
+
],
|
|
58
|
+
[
|
|
59
|
+
'name' => 'Order Management',
|
|
60
|
+
'description' => 'Solutions for handling orders from placement to delivery, including tracking and customer communication.',
|
|
61
|
+
'internal_id' => 'FLBORDER',
|
|
62
|
+
'icon' => 'clipboard-list',
|
|
63
|
+
'tags' => ['orders', 'tracking', 'delivery', 'customer service'],
|
|
64
|
+
'for' => 'extension_category'
|
|
65
|
+
],
|
|
66
|
+
[
|
|
67
|
+
'name' => 'Warehouse Management',
|
|
68
|
+
'description' => 'Systems for managing warehouse operations, inventory storage, and logistics.',
|
|
69
|
+
'internal_id' => 'FLBWAREHOUSE',
|
|
70
|
+
'icon' => 'warehouse',
|
|
71
|
+
'tags' => ['warehouse', 'inventory', 'logistics', 'storage'],
|
|
72
|
+
'for' => 'extension_category'
|
|
73
|
+
],
|
|
74
|
+
[
|
|
75
|
+
'name' => 'Compliance and Regulations',
|
|
76
|
+
'description' => 'Tools to ensure compliance with local and international shipping and logistics regulations.',
|
|
77
|
+
'internal_id' => 'FLBCOMPLIANCE',
|
|
78
|
+
'icon' => 'scale-balanced',
|
|
79
|
+
'tags' => ['compliance', 'regulations', 'shipping', 'international'],
|
|
80
|
+
'for' => 'extension_category'
|
|
81
|
+
],
|
|
82
|
+
[
|
|
83
|
+
'name' => 'Analytics and Reporting',
|
|
84
|
+
'description' => 'Advanced analytics and reporting tools for insights into logistics operations.',
|
|
85
|
+
'internal_id' => 'FLBANALYTICS',
|
|
86
|
+
'icon' => 'chart-line',
|
|
87
|
+
'tags' => ['analytics', 'reporting', 'data', 'insights'],
|
|
88
|
+
'for' => 'extension_category'
|
|
89
|
+
],
|
|
90
|
+
[
|
|
91
|
+
'name' => 'Customer Relationship Management (CRM)',
|
|
92
|
+
'description' => 'Extensions to manage customer interactions, support, and relationships.',
|
|
93
|
+
'internal_id' => 'FLBCRM',
|
|
94
|
+
'icon' => 'users',
|
|
95
|
+
'tags' => ['CRM', 'customer', 'support', 'relationship'],
|
|
96
|
+
'for' => 'extension_category'
|
|
97
|
+
],
|
|
98
|
+
[
|
|
99
|
+
'name' => 'E-commerce',
|
|
100
|
+
'description' => 'Comprehensive e-commerce solutions, ranging from integration tools with existing platforms to complete e-commerce applications, enhancing online retail and digital transactions.',
|
|
101
|
+
'internal_id' => 'FLBECOMMERCE',
|
|
102
|
+
'icon' => 'store',
|
|
103
|
+
'tags' => ['e-commerce', 'integration', 'shopping', 'online'],
|
|
104
|
+
'for' => 'extension_category'
|
|
105
|
+
],
|
|
106
|
+
[
|
|
107
|
+
'name' => 'Security and Risk Management',
|
|
108
|
+
'description' => 'Enhancements for improving security and managing risks in logistics operations.',
|
|
109
|
+
'internal_id' => 'FLBSECURITY',
|
|
110
|
+
'icon' => 'shield-alt',
|
|
111
|
+
'tags' => ['security', 'risk management', 'safety', 'protection'],
|
|
112
|
+
'for' => 'extension_category'
|
|
113
|
+
],
|
|
114
|
+
[
|
|
115
|
+
'name' => 'Transportation Management',
|
|
116
|
+
'description' => 'Solutions for managing and optimizing different modes of transportation, including carrier selection and freight consolidation.',
|
|
117
|
+
'internal_id' => 'FLBTRANSPORT',
|
|
118
|
+
'icon' => 'truck-fast',
|
|
119
|
+
'tags' => ['transportation', 'freight', 'carrier management', 'optimization'],
|
|
120
|
+
'for' => 'extension_category'
|
|
121
|
+
],
|
|
122
|
+
[
|
|
123
|
+
'name' => 'Customs and Trade Compliance',
|
|
124
|
+
'description' => 'Tools to navigate and comply with international trade laws, customs regulations, and import/export requirements.',
|
|
125
|
+
'internal_id' => 'FLBCUSTOMS',
|
|
126
|
+
'icon' => 'passport',
|
|
127
|
+
'tags' => ['customs', 'trade', 'compliance', 'import', 'export'],
|
|
128
|
+
'for' => 'extension_category'
|
|
129
|
+
],
|
|
130
|
+
[
|
|
131
|
+
'name' => 'Supplier Relationship Management',
|
|
132
|
+
'description' => 'Extensions to manage and enhance relationships with suppliers, including communication and performance tracking.',
|
|
133
|
+
'internal_id' => 'FLBSUPPLIER',
|
|
134
|
+
'icon' => 'handshake',
|
|
135
|
+
'tags' => ['suppliers', 'relationship management', 'performance', 'communication'],
|
|
136
|
+
'for' => 'extension_category'
|
|
137
|
+
],
|
|
138
|
+
[
|
|
139
|
+
'name' => 'Quality Control',
|
|
140
|
+
'description' => 'Tools for quality assurance in supply chain processes, including product inspections and compliance monitoring.',
|
|
141
|
+
'internal_id' => 'FLBQUALITY',
|
|
142
|
+
'icon' => 'check-circle',
|
|
143
|
+
'tags' => ['quality control', 'inspection', 'compliance', 'assurance'],
|
|
144
|
+
'for' => 'extension_category'
|
|
145
|
+
],
|
|
146
|
+
[
|
|
147
|
+
'name' => 'Forecasting and Demand Planning',
|
|
148
|
+
'description' => 'Analytical tools for accurate demand forecasting and inventory optimization based on market trends and data analysis.',
|
|
149
|
+
'internal_id' => 'FLBFORECASTING',
|
|
150
|
+
'icon' => 'magnifying-glass-location',
|
|
151
|
+
'tags' => ['forecasting', 'demand planning', 'inventory', 'market trends'],
|
|
152
|
+
'for' => 'extension_category'
|
|
153
|
+
],
|
|
154
|
+
[
|
|
155
|
+
'name' => 'Procurement and Purchasing',
|
|
156
|
+
'description' => 'Solutions for managing procurement processes, including purchase orders, vendor selection, and contract management.',
|
|
157
|
+
'internal_id' => 'FLBPROCUREMENT',
|
|
158
|
+
'icon' => 'basket-shopping',
|
|
159
|
+
'tags' => ['procurement', 'purchasing', 'vendors', 'contracts'],
|
|
160
|
+
'for' => 'extension_category'
|
|
161
|
+
],
|
|
162
|
+
[
|
|
163
|
+
'name' => 'Asset Tracking and Management',
|
|
164
|
+
'description' => 'Tools for tracking and managing assets within the supply chain, including RFID, barcode, and IoT technologies.',
|
|
165
|
+
'internal_id' => 'FLBASSET',
|
|
166
|
+
'icon' => 'barcode',
|
|
167
|
+
'tags' => ['asset tracking', 'management', 'RFID', 'IoT'],
|
|
168
|
+
'for' => 'extension_category'
|
|
169
|
+
],
|
|
170
|
+
[
|
|
171
|
+
'name' => 'Sustainability and Environmental Compliance',
|
|
172
|
+
'description' => 'Solutions focused on environmental compliance and sustainable practices in logistics and supply chain operations.',
|
|
173
|
+
'internal_id' => 'FLBENVIRONMENT',
|
|
174
|
+
'icon' => 'leaf',
|
|
175
|
+
'tags' => ['sustainability', 'environmental compliance', 'green logistics', 'eco-friendly'],
|
|
176
|
+
'for' => 'extension_category'
|
|
177
|
+
],
|
|
178
|
+
[
|
|
179
|
+
'name' => 'Human Resources Management',
|
|
180
|
+
'description' => 'Extensions for managing logistics workforce, including scheduling, training, and performance evaluations.',
|
|
181
|
+
'internal_id' => 'FLBHR',
|
|
182
|
+
'icon' => 'user-tie',
|
|
183
|
+
'tags' => ['human resources', 'workforce management', 'training', 'scheduling'],
|
|
184
|
+
'for' => 'extension_category'
|
|
185
|
+
],
|
|
186
|
+
[
|
|
187
|
+
'name' => 'Collaboration and Communication Tools',
|
|
188
|
+
'description' => 'Platforms and tools to facilitate effective collaboration and communication among supply chain stakeholders.',
|
|
189
|
+
'internal_id' => 'FLBCOLLABORATION',
|
|
190
|
+
'icon' => 'comments',
|
|
191
|
+
'tags' => ['collaboration', 'communication', 'teamwork', 'stakeholders'],
|
|
192
|
+
'for' => 'extension_category'
|
|
193
|
+
],
|
|
194
|
+
[
|
|
195
|
+
'name' => 'Artificial Intelligence',
|
|
196
|
+
'description' => 'Advanced AI-driven tools and applications for predictive analytics, automation, and intelligent decision-making in logistics.',
|
|
197
|
+
'internal_id' => 'FLBAI',
|
|
198
|
+
'icon' => 'robot',
|
|
199
|
+
'tags' => ['AI', 'predictive analytics', 'automation', 'intelligence'],
|
|
200
|
+
'for' => 'extension_category'
|
|
201
|
+
],
|
|
202
|
+
[
|
|
203
|
+
'name' => 'Freight Forwarding',
|
|
204
|
+
'description' => 'Comprehensive solutions for managing and optimizing the process of freight forwarding, including documentation, cargo handling, and customs brokerage.',
|
|
205
|
+
'internal_id' => 'FLBFREIGHTFORWARD',
|
|
206
|
+
'icon' => 'truck-ramp-box',
|
|
207
|
+
'tags' => ['freight forwarding', 'cargo handling', 'customs', 'logistics'],
|
|
208
|
+
'for' => 'extension_category'
|
|
209
|
+
],
|
|
210
|
+
[
|
|
211
|
+
'name' => 'Air Cargo Logistics',
|
|
212
|
+
'description' => 'Specialized tools for air cargo handling, including tracking, capacity management, and air freight optimization.',
|
|
213
|
+
'internal_id' => 'FLBAIRCARGO',
|
|
214
|
+
'icon' => 'plane',
|
|
215
|
+
'tags' => ['air cargo', 'tracking', 'capacity management', 'air freight'],
|
|
216
|
+
'for' => 'extension_category'
|
|
217
|
+
],
|
|
218
|
+
[
|
|
219
|
+
'name' => 'Bulk Shipping',
|
|
220
|
+
'description' => 'Solutions for managing bulk cargo shipments, including vessel chartering, loading and unloading operations, and safety compliance.',
|
|
221
|
+
'internal_id' => 'FLBBULKSHIPPING',
|
|
222
|
+
'icon' => 'anchor',
|
|
223
|
+
'tags' => ['bulk shipping', 'vessel chartering', 'cargo operations', 'safety'],
|
|
224
|
+
'for' => 'extension_category'
|
|
225
|
+
],
|
|
226
|
+
[
|
|
227
|
+
'name' => 'LNG Logistics',
|
|
228
|
+
'description' => 'Tools and technologies for handling Liquefied Natural Gas (LNG) logistics, covering transportation, storage, and distribution.',
|
|
229
|
+
'internal_id' => 'FLBLNGLOGISTICS',
|
|
230
|
+
'icon' => 'gas-pump',
|
|
231
|
+
'tags' => ['LNG', 'liquefied natural gas', 'transportation', 'storage'],
|
|
232
|
+
'for' => 'extension_category'
|
|
233
|
+
],
|
|
234
|
+
[
|
|
235
|
+
'name' => 'Train Cargo Management',
|
|
236
|
+
'description' => 'Systems for managing train cargo logistics, including scheduling, cargo tracking, and railway compliance.',
|
|
237
|
+
'internal_id' => 'FLBTRAINCARGO',
|
|
238
|
+
'icon' => 'train',
|
|
239
|
+
'tags' => ['train cargo', 'scheduling', 'tracking', 'railway'],
|
|
240
|
+
'for' => 'extension_category'
|
|
241
|
+
],
|
|
242
|
+
[
|
|
243
|
+
'name' => 'Container Haulage',
|
|
244
|
+
'description' => 'Efficient management of container haulage operations, with features for container tracking, port operations, and haulier scheduling.',
|
|
245
|
+
'internal_id' => 'FLBCONTAINERHAULAGE',
|
|
246
|
+
'icon' => 'trailer',
|
|
247
|
+
'tags' => ['container', 'haulage', 'tracking', 'port operations'],
|
|
248
|
+
'for' => 'extension_category'
|
|
249
|
+
],
|
|
250
|
+
[
|
|
251
|
+
'name' => 'Tactical Logistics',
|
|
252
|
+
'description' => 'Solutions for tactical support, including field logistics, deployment planning, and military supply chain management.',
|
|
253
|
+
'internal_id' => 'FLBTACTICAL',
|
|
254
|
+
'icon' => 'jet-fighter',
|
|
255
|
+
'tags' => ['tactical', 'field logistics', 'deployment', 'military supply'],
|
|
256
|
+
'for' => 'extension_category'
|
|
257
|
+
],
|
|
258
|
+
[
|
|
259
|
+
'name' => 'Secure Communications',
|
|
260
|
+
'description' => 'Secure and encrypted communication tools designed for military-grade confidentiality and reliability.',
|
|
261
|
+
'internal_id' => 'FLBSECURECOMMS',
|
|
262
|
+
'icon' => 'walkie-talkie',
|
|
263
|
+
'tags' => ['secure', 'encrypted', 'communication', 'military'],
|
|
264
|
+
'for' => 'extension_category'
|
|
265
|
+
],
|
|
266
|
+
[
|
|
267
|
+
'name' => 'Surveillance and Reconnaissance',
|
|
268
|
+
'description' => 'Advanced surveillance and reconnaissance tools, including UAVs, sensors, and satellite imaging for operational intelligence.',
|
|
269
|
+
'internal_id' => 'FLBSURVEILLANCE',
|
|
270
|
+
'icon' => 'binoculars',
|
|
271
|
+
'tags' => ['surveillance', 'reconnaissance', 'UAV', 'intelligence'],
|
|
272
|
+
'for' => 'extension_category'
|
|
273
|
+
],
|
|
274
|
+
[
|
|
275
|
+
'name' => 'Cybersecurity',
|
|
276
|
+
'description' => 'Cybersecurity solutions to protect logistics data and operations from cyber threats and attacks.',
|
|
277
|
+
'internal_id' => 'FLBCYBERSECURITY',
|
|
278
|
+
'icon' => 'fingerprint',
|
|
279
|
+
'tags' => ['cybersecurity', 'data protection', 'cyber threats', 'security'],
|
|
280
|
+
'for' => 'extension_category'
|
|
281
|
+
],
|
|
282
|
+
[
|
|
283
|
+
'name' => 'Mission Planning and Analysis',
|
|
284
|
+
'description' => 'Tools for strategic mission planning and analysis, including scenario modeling and operational readiness assessments.',
|
|
285
|
+
'internal_id' => 'FLBMISSIONPLANNING',
|
|
286
|
+
'icon' => 'map-marked-alt',
|
|
287
|
+
'tags' => ['mission planning', 'analysis', 'modeling', 'readiness'],
|
|
288
|
+
'for' => 'extension_category'
|
|
289
|
+
],
|
|
290
|
+
[
|
|
291
|
+
'name' => 'Armaments and Ammunition Management',
|
|
292
|
+
'description' => 'Management tools for tracking and maintaining armaments and ammunition inventories.',
|
|
293
|
+
'internal_id' => 'FLBARMAMANAGEMENT',
|
|
294
|
+
'icon' => 'person-rifle',
|
|
295
|
+
'tags' => ['armaments', 'ammunition', 'inventory', 'management'],
|
|
296
|
+
'for' => 'extension_category'
|
|
297
|
+
],
|
|
298
|
+
[
|
|
299
|
+
'name' => 'Emergency and Disaster Response',
|
|
300
|
+
'description' => 'Solutions for organizing and managing logistics in emergency and disaster response scenarios.',
|
|
301
|
+
'internal_id' => 'FLBEMERGENCYRESPONSE',
|
|
302
|
+
'icon' => 'truck-medical',
|
|
303
|
+
'tags' => ['emergency', 'disaster response', 'logistics', 'crisis management'],
|
|
304
|
+
'for' => 'extension_category'
|
|
305
|
+
],
|
|
306
|
+
[
|
|
307
|
+
'name' => 'Training and Simulation',
|
|
308
|
+
'description' => 'Advanced training tools and simulation software for military logistics and operational training.',
|
|
309
|
+
'internal_id' => 'FLBTRAININGSIM',
|
|
310
|
+
'icon' => 'person-running',
|
|
311
|
+
'tags' => ['training', 'simulation', 'military', 'logistics'],
|
|
312
|
+
'for' => 'extension_category'
|
|
313
|
+
],
|
|
314
|
+
[
|
|
315
|
+
'name' => 'Vehicle and Equipment Maintenance',
|
|
316
|
+
'description' => 'Maintenance management systems for military vehicles and equipment, including predictive maintenance tools.',
|
|
317
|
+
'internal_id' => 'FLBVEHICLEMAINT',
|
|
318
|
+
'icon' => 'wrench',
|
|
319
|
+
'tags' => ['vehicle', 'equipment', 'maintenance', 'predictive tools'],
|
|
320
|
+
'for' => 'extension_category'
|
|
321
|
+
],
|
|
322
|
+
[
|
|
323
|
+
'name' => 'Manufacturing Operations',
|
|
324
|
+
'description' => 'Tools and systems designed for the manufacturing industry, including automation, process control, and production planning.',
|
|
325
|
+
'internal_id' => 'FLBMANUFACTURING',
|
|
326
|
+
'icon' => 'industry',
|
|
327
|
+
'tags' => ['manufacturing', 'automation', 'process control', 'production'],
|
|
328
|
+
'for' => 'extension_category'
|
|
329
|
+
],
|
|
330
|
+
[
|
|
331
|
+
'name' => 'Medical Logistics',
|
|
332
|
+
'description' => 'Solutions tailored for the medical industry, focusing on medical supply chain, equipment tracking, and pharmaceutical logistics.',
|
|
333
|
+
'internal_id' => 'FLBMEDICAL',
|
|
334
|
+
'icon' => 'kit-medical',
|
|
335
|
+
'tags' => ['medical', 'pharmaceutical', 'supply chain', 'equipment tracking'],
|
|
336
|
+
'for' => 'extension_category'
|
|
337
|
+
],
|
|
338
|
+
[
|
|
339
|
+
'name' => 'Mining Industry',
|
|
340
|
+
'description' => 'Specialized solutions for the mining industry, encompassing resource management, excavation planning, and safety protocols.',
|
|
341
|
+
'internal_id' => 'FLBMINING',
|
|
342
|
+
'icon' => 'gem',
|
|
343
|
+
'tags' => ['mining', 'resource management', 'excavation', 'safety'],
|
|
344
|
+
'for' => 'extension_category'
|
|
345
|
+
]
|
|
346
|
+
];
|
|
347
|
+
|
|
348
|
+
// Insert core extension categories
|
|
349
|
+
foreach ($categories as $category) {
|
|
350
|
+
Category::updateOrCreate(
|
|
351
|
+
[
|
|
352
|
+
'internal_id' => $category['internal_id'],
|
|
353
|
+
'for' => 'extension_category'
|
|
354
|
+
],
|
|
355
|
+
array_merge($category, ['core_category' => 1])
|
|
356
|
+
);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|