generated from Flycro/laravel-nuxt
feat: Added Jobs Admin Page
This commit is contained in:
@@ -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',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
40
nuxt/pages/admin/jobs.vue
Normal file
40
nuxt/pages/admin/jobs.vue
Normal file
@@ -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');
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user