diff --git a/app/Http/Controllers/BookRecommendationController.php b/app/Http/Controllers/BookRecommendationController.php index d0b0493..d27a0b6 100644 --- a/app/Http/Controllers/BookRecommendationController.php +++ b/app/Http/Controllers/BookRecommendationController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Models\BookRecommendation; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Storage; class BookRecommendationController extends Controller @@ -136,4 +137,10 @@ class BookRecommendationController extends Controller $bookRecommendation->delete(); return response()->json(null, 204); } + + public function fetchCover(Request $request) + { + Artisan::call('book:open-library-fetch-cover-art'); + return response()->json(Artisan::output()); + } } diff --git a/nuxt/components/Navigation.client.vue b/nuxt/components/Navigation.client.vue index 8719efa..6b147b6 100644 --- a/nuxt/components/Navigation.client.vue +++ b/nuxt/components/Navigation.client.vue @@ -38,6 +38,11 @@ if (authStore.user?.roles.includes('admin')) { to: '/admin/votes', icon: 'i-heroicons-star', }, + { + label: 'Jobs', + to: '/admin/jobs', + icon: 'i-heroicons-briefcase', + }, ], }) } diff --git a/nuxt/pages/admin/jobs.vue b/nuxt/pages/admin/jobs.vue new file mode 100644 index 0000000..70245f9 --- /dev/null +++ b/nuxt/pages/admin/jobs.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/routes/api.php b/routes/api.php index f49f2b8..b7475ef 100644 --- a/routes/api.php +++ b/routes/api.php @@ -42,6 +42,8 @@ Route::prefix('api/v1')->group(function () { Route::post('account/update', [AccountController::class, 'update'])->name('account.update'); Route::post('account/password', [AccountController::class, 'password'])->name('account.password'); + Route::post('jobs/fetch-cover', [BookRecommendationController::class, 'fetchCover'])->name('jobs.fetch-cover'); + Route::middleware(['throttle:uploads'])->group(function () { Route::post('upload', [UploadController::class, 'image'])->name('upload.image'); });