diff --git a/services/modpack-version-checker/blueprint-extension/build.sh b/services/modpack-version-checker/blueprint-extension/build.sh index 9ef71ff..8d7669c 100755 --- a/services/modpack-version-checker/blueprint-extension/build.sh +++ b/services/modpack-version-checker/blueprint-extension/build.sh @@ -1,9 +1,17 @@ #!/bin/bash -# build.sh - Executes automatically during blueprint -build -# Phase 5: Console widget + Dashboard badge injection +# ============================================================================= +# MODPACK VERSION CHECKER - BUILD SCRIPT +# ============================================================================= +# +# Executes automatically during `blueprint -build` +# Injects React components into Pterodactyl's frontend +# +# @author Firefrost Gaming / Frostystyle +# @version 1.0.0 +# ============================================================================= echo "==========================================" -echo "ModpackChecker Build Script - Phase 5" +echo "ModpackChecker Build Script v1.0.0" echo "==========================================" # Determine the extension source directory @@ -20,7 +28,7 @@ fi echo "Using extension directory: $EXT_DIR" # =========================================== -# 1. CONSOLE WIDGET (wrapper.tsx → ModpackVersionCard) +# 1. CONSOLE WIDGET INJECTION # =========================================== echo "" echo "--- Console Widget ---" @@ -35,20 +43,20 @@ fi # Inject into ServerConsoleContainer.tsx if ! grep -q "ModpackVersionCard" resources/scripts/components/server/console/ServerConsoleContainer.tsx 2>/dev/null; then sed -i '1i import ModpackVersionCard from "@/components/server/ModpackVersionCard";' resources/scripts/components/server/console/ServerConsoleContainer.tsx - sed -i '/' resources/scripts/components/server/console/ServerConsoleContainer.tsx + # Place after ServerDetailsBlock for consistent positioning + sed -i '/' resources/scripts/components/server/console/ServerConsoleContainer.tsx echo "✓ Injected ModpackVersionCard into ServerConsoleContainer.tsx" else echo "○ ModpackVersionCard already present in ServerConsoleContainer.tsx" fi # =========================================== -# 2. DASHBOARD BADGE (UpdateBadge.tsx) +# 2. DASHBOARD BADGE INJECTION # =========================================== echo "" echo "--- Dashboard Badge ---" if [ -f "$EXT_DIR/views/dashboard/UpdateBadge.tsx" ]; then - # Ensure target directory exists mkdir -p resources/scripts/components/dashboard cp "$EXT_DIR/views/dashboard/UpdateBadge.tsx" resources/scripts/components/dashboard/UpdateBadge.tsx echo "✓ Copied UpdateBadge.tsx" @@ -58,30 +66,19 @@ fi # Inject into ServerRow.tsx (dashboard server list) if ! grep -q "UpdateBadge" resources/scripts/components/dashboard/ServerRow.tsx 2>/dev/null; then - # Add import at top sed -i '1i import UpdateBadge from "@/components/dashboard/UpdateBadge";' resources/scripts/components/dashboard/ServerRow.tsx - - # Inject badge right after the server name - # The pattern looks for the server name paragraph and adds our badge inside it - sed -i 's|

{server.name}

|

{server.name}

|' resources/scripts/components/dashboard/ServerRow.tsx - + # Targeted replacement: append badge after server name + sed -i 's|{server.name}

|{server.name}

|' resources/scripts/components/dashboard/ServerRow.tsx echo "✓ Injected UpdateBadge into ServerRow.tsx" else echo "○ UpdateBadge already present in ServerRow.tsx" fi # =========================================== -# 3. CONSOLE COMMAND (CheckModpackUpdates.php) +# NOTE: Console Command (CheckModpackUpdates.php) # =========================================== -echo "" -echo "--- Console Command ---" - -if [ -f "$EXT_DIR/console/CheckModpackUpdates.php" ]; then - cp "$EXT_DIR/console/CheckModpackUpdates.php" app/Console/Commands/CheckModpackUpdates.php - echo "✓ Copied CheckModpackUpdates.php to app/Console/Commands/" -else - echo "⚠ CheckModpackUpdates.php not found, skipping cron command" -fi +# The PHP console command is automatically merged by Blueprint via +# conf.yml's `requests.app: "app"` setting. No manual copy needed. echo "" echo "==========================================" diff --git a/services/modpack-version-checker/blueprint-extension/database/migrations/2026_04_06_000000_create_modpackchecker_servers_table.php b/services/modpack-version-checker/blueprint-extension/database/migrations/2026_04_06_000000_create_modpackchecker_servers_table.php index baf2c58..c40d8da 100644 --- a/services/modpack-version-checker/blueprint-extension/database/migrations/2026_04_06_000000_create_modpackchecker_servers_table.php +++ b/services/modpack-version-checker/blueprint-extension/database/migrations/2026_04_06_000000_create_modpackchecker_servers_table.php @@ -11,24 +11,25 @@ return new class extends Migration */ public function up(): void { - // Note: Blueprint extensions use the blueprint->dbGet/dbSet methods - // which store data in the existing settings table. - // This migration creates a table for per-server modpack tracking. - Schema::create('modpackchecker_servers', function (Blueprint $table) { $table->id(); + // Use the string UUID to match Pterodactyl's server identification $table->string('server_uuid')->unique(); $table->string('platform')->nullable(); // curseforge, modrinth, technic, ftb $table->string('modpack_id')->nullable(); $table->string('modpack_name')->nullable(); $table->string('current_version')->nullable(); $table->string('latest_version')->nullable(); - $table->enum('status', ['up_to_date', 'update_available', 'error', 'unknown'])->default('unknown'); + // Flexible string status instead of Enum for future extensibility + $table->string('status')->default('unknown'); $table->timestamp('last_checked')->nullable(); $table->text('error_message')->nullable(); $table->timestamps(); - // Index for efficient lookups + // Foreign key - cascade delete when server is removed + $table->foreign('server_uuid')->references('uuid')->on('servers')->onDelete('cascade'); + + // Indexes for efficient lookups $table->index('status'); $table->index('last_checked'); }); diff --git a/services/modpack-version-checker/blueprint-extension/routes/client.php b/services/modpack-version-checker/blueprint-extension/routes/client.php index 57d8853..05d4a43 100644 --- a/services/modpack-version-checker/blueprint-extension/routes/client.php +++ b/services/modpack-version-checker/blueprint-extension/routes/client.php @@ -8,12 +8,13 @@ use Pterodactyl\Http\Controllers\ModpackAPIController; | ModpackChecker Client Routes |-------------------------------------------------------------------------- | -| These routes are automatically wrapped in Pterodactyl's client auth -| middleware. The {server} parameter is injected automatically. +| Blueprint auto-prefixes these with /api/client/extensions/modpackchecker/ +| So our paths here are relative to that prefix. | */ -Route::post('/servers/{server}/ext/modpackchecker/check', [ModpackAPIController::class, 'manualCheck']); +// Resulting URL: /api/client/extensions/modpackchecker/servers/{server}/check +Route::post('/servers/{server}/check', [ModpackAPIController::class, 'manualCheck']); -// Dashboard badge status endpoint - returns all servers' update status in one call -Route::get('/extensions/modpackchecker/status', [ModpackAPIController::class, 'getStatus']); +// Resulting URL: /api/client/extensions/modpackchecker/status +Route::get('/status', [ModpackAPIController::class, 'getStatus']);