generated from Flycro/laravel-nuxt
feat: Added Jobs Admin Page
parent
b6f9968a46
commit
c2a2ae0d07
|
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\BookRecommendation;
|
use App\Models\BookRecommendation;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Artisan;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
class BookRecommendationController extends Controller
|
class BookRecommendationController extends Controller
|
||||||
|
|
@ -136,4 +137,10 @@ class BookRecommendationController extends Controller
|
||||||
$bookRecommendation->delete();
|
$bookRecommendation->delete();
|
||||||
return response()->json(null, 204);
|
return response()->json(null, 204);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function fetchCover(Request $request)
|
||||||
|
{
|
||||||
|
Artisan::call('book:open-library-fetch-cover-art');
|
||||||
|
return response()->json(Artisan::output());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,11 @@ if (authStore.user?.roles.includes('admin')) {
|
||||||
to: '/admin/votes',
|
to: '/admin/votes',
|
||||||
icon: 'i-heroicons-star',
|
icon: 'i-heroicons-star',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: 'Jobs',
|
||||||
|
to: '/admin/jobs',
|
||||||
|
icon: 'i-heroicons-briefcase',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
definePageMeta({ middleware: ['role-admin'] })
|
||||||
|
|
||||||
|
const serverLogs = ref<string>('')
|
||||||
|
|
||||||
|
async function runJobs(job: string) {
|
||||||
|
switch (job) {
|
||||||
|
case 'fetch_cover':
|
||||||
|
serverLogs.value = await $fetch('jobs/fetch-cover', { method: 'POST' })
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="flex gap-4">
|
||||||
|
<UCard class="w-1/2">
|
||||||
|
<template #header>
|
||||||
|
<h1 class="font-sans text-3xl font-bold">
|
||||||
|
Server Jobs
|
||||||
|
</h1>
|
||||||
|
<UButton class="mt-4" @click="runJobs('fetch_cover')">
|
||||||
|
Cover Bilder anfragen
|
||||||
|
</UButton>
|
||||||
|
</template>
|
||||||
|
</UCard>
|
||||||
|
<UCard class="w-1/2">
|
||||||
|
<template #header>
|
||||||
|
<h1 class="font-sans text-3xl font-bold">
|
||||||
|
Server Logs
|
||||||
|
</h1>
|
||||||
|
<UTextarea v-model="serverLogs" autoresize disabled class="mt-4" />
|
||||||
|
</template>
|
||||||
|
</UCard>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
@ -42,6 +42,8 @@ Route::prefix('api/v1')->group(function () {
|
||||||
Route::post('account/update', [AccountController::class, 'update'])->name('account.update');
|
Route::post('account/update', [AccountController::class, 'update'])->name('account.update');
|
||||||
Route::post('account/password', [AccountController::class, 'password'])->name('account.password');
|
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::middleware(['throttle:uploads'])->group(function () {
|
||||||
Route::post('upload', [UploadController::class, 'image'])->name('upload.image');
|
Route::post('upload', [UploadController::class, 'image'])->name('upload.image');
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue