Compare commits

...

6 Commits

Author SHA1 Message Date
444feac1e0 Use redirect for random button to save database queries 2025-10-09 12:55:24 +02:00
c034c94db5 Add padding to comments on home page 2025-10-09 12:38:54 +02:00
ca52584da9 Cache random hentai row for 5 minutes 2025-10-09 12:38:17 +02:00
dca4924e9a Add v2 re-release discord webhook 2025-10-08 20:01:06 +02:00
9ad7c7afc2 Fix incorrect cache key 2025-10-08 19:50:55 +02:00
6c8d34b030 Fix vite build 2025-10-08 19:38:54 +02:00
9 changed files with 30 additions and 9 deletions

View File

@@ -44,7 +44,7 @@ class HentaiApiController extends Controller
public function getMonthlyViews() public function getMonthlyViews()
{ {
// Cache for 60 minutes // Cache for 60 minutes
$data = Cache::remember('api_hentai_list', now()->addMinutes(60), function () { $data = Cache::remember('api_monthly_views', now()->addMinutes(60), function () {
return PopularMonthly::selectRaw('DATE(created_at) as date, COUNT(*) as count') return PopularMonthly::selectRaw('DATE(created_at) as date, COUNT(*) as count')
->groupBy('date') ->groupBy('date')
->orderBy('date', 'asc') ->orderBy('date', 'asc')

View File

@@ -52,6 +52,22 @@ class HomeController extends Controller
return view('auth.banned'); return view('auth.banned');
} }
/**
* Redirects to a random Hentai episode
* Done due to performance reasons
*/
public function random(): \Illuminate\Http\RedirectResponse
{
$random = Episode::inRandomOrder()
->limit(1)
->pluck('slug')
->first();
return redirect()->route('hentai.index', [
'title' => $random,
]);
}
/** /**
* Display Search Page. * Display Search Page.
*/ */

View File

@@ -51,7 +51,7 @@ class DiscordReleaseNotification implements ShouldQueue
break; break;
case 'v2': case 'v2':
# v2 re-release # v2 re-release
DiscordAlert::to('update')->message("<@&1425505303075754035> (´• ω •`)ノ **v2 Re-**Release! Check it out here: https://hstream.moe/hentai/".$this->slug); DiscordAlert::to('rerelease')->message("<@&1425505303075754035> (´• ω •`)ノ **v2 Re-**Release! Check it out here: https://hstream.moe/hentai/".$this->slug);
break; break;
default: default:
break; break;

View File

@@ -7,6 +7,7 @@ return [
'webhook_urls' => [ 'webhook_urls' => [
'default' => env('DISCORD_ALERT_WEBHOOK'), 'default' => env('DISCORD_ALERT_WEBHOOK'),
'update' => env('DISCORD_ALERT_UPDATE_WEBHOOK'), 'update' => env('DISCORD_ALERT_UPDATE_WEBHOOK'),
'rerelease' => env('DISCORD_ALERT_RERELEASE_WEBHOOK'),
], ],
/* /*

View File

@@ -24,9 +24,8 @@
@include('home.partials.random') @include('home.partials.random')
</div> </div>
<!-- Comments --> <!-- Comments -->
<div class="mx-auto pt-6 sm:px-6 lg:px-8 space-y-6 max-w-[100%] xl:max-w-[95%] 2xl:max-w-[85%]"> <div class="mx-auto pt-6 sm:px-6 lg:px-8 space-y-6 max-w-[100%] xl:max-w-[95%] 2xl:max-w-[85%] pb-2">
@include('home.partials.comments') @include('home.partials.comments')
</div> </div>
</x-app-layout> </x-app-layout>

View File

@@ -1,8 +1,12 @@
<p class="leading-normal font-bold text-lg text-neutral-800 dark:text-white"> <p class="leading-normal font-bold text-lg text-neutral-800 dark:text-white">
Random Random <span class="font-light text-xs text-neutral-800/60 dark:text-white/40">(Cached for 5 minutes)</span>
</p> </p>
@php $random = \App\Models\Episode::inRandomOrder()->limit(8)->get(); @endphp @php
$random = \cache()->remember('random_home', 300, function () {
return \App\Models\Episode::inRandomOrder()->limit(8)->get(); ;
});
@endphp
<div class="mb-6"> <div class="mb-6">
@include('home.partials.tab.template', ['episodes' => $random, 'showThumbnails' => false]) @include('home.partials.tab.template', ['episodes' => $random, 'showThumbnails' => false])

View File

@@ -67,8 +67,7 @@
@livewire('nav-live-search') @livewire('nav-live-search')
<div class="hidden lg:block pl-4"> <div class="hidden lg:block pl-4">
<div class="flex flex-col items-center bg-gray-50/20 dark:bg-neutral-900/40 rounded-md"> <div class="flex flex-col items-center bg-gray-50/20 dark:bg-neutral-900/40 rounded-md">
@php $random = App\Models\Episode::inRandomOrder()->limit(1)->pluck('slug')->first(); @endphp <a href="{{ route('hentai.random') }}"
<a href="{{ route('hentai.index', ['title' => $random]) }}"
class="cursor-pointer px-4 py-2 text-sm font-medium dark:hover:text-white text-gray-500 dark:text-white/90 focus:outline-none flex flex-col items-center md:flex-row"> class="cursor-pointer px-4 py-2 text-sm font-medium dark:hover:text-white text-gray-500 dark:text-white/90 focus:outline-none flex flex-col items-center md:flex-row">
<i class="fa-solid fa-shuffle"></i> <i class="fa-solid fa-shuffle"></i>
<p class="md:pl-1 pl-0">Random</p> <p class="md:pl-1 pl-0">Random</p>

View File

@@ -22,6 +22,7 @@ use Illuminate\Support\Facades\Route;
Route::get('/', [HomeController::class, 'index'])->name('home.index'); Route::get('/', [HomeController::class, 'index'])->name('home.index');
Route::get('/stats', [HomeController::class, 'stats'])->name('home.stats'); Route::get('/stats', [HomeController::class, 'stats'])->name('home.stats');
Route::get('/banned', [HomeController::class, 'banned'])->name('home.banned'); Route::get('/banned', [HomeController::class, 'banned'])->name('home.banned');
Route::get('/random', [HomeController::class, 'random'])->name('hentai.random');
// API Endpoint // API Endpoint
Route::get('/v1/hentai-list', [HentaiApiController::class, 'index'])->name('api.hentai.index'); Route::get('/v1/hentai-list', [HentaiApiController::class, 'index'])->name('api.hentai.index');

View File

@@ -20,7 +20,8 @@ export default defineConfig({
'resources/js/user-blacklist.js', 'resources/js/user-blacklist.js',
'resources/js/admin-edit.js', 'resources/js/admin-edit.js',
'resources/js/admin-subtitles.js', 'resources/js/admin-subtitles.js',
'resources/js/preview.js' 'resources/js/preview.js',
'resources/js/stats.js'
], ],
refresh: true, refresh: true,
}), }),