mirror of
https://github.com/sp-tarkov/forge.git
synced 2025-02-12 12:10:41 -05:00
setup download counting
This commit is contained in:
parent
2cca45bcea
commit
6d6670e246
23
app/Http/Controllers/ModVersionController.php
Normal file
23
app/Http/Controllers/ModVersionController.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\ModVersion;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
|
||||
class ModVersionController extends Controller
|
||||
{
|
||||
public function show(int $modId, string $version): RedirectResponse
|
||||
{
|
||||
$modVersion = ModVersion::where("mod_id", $modId)->where("version", $version)->first();
|
||||
|
||||
if ($modVersion == null) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
$modVersion->downloads++;
|
||||
$modVersion->save();
|
||||
|
||||
return redirect($modVersion->link);
|
||||
}
|
||||
}
|
@ -46,6 +46,11 @@ class Mod extends Model
|
||||
$this->saveQuietly();
|
||||
}
|
||||
|
||||
public function downloadUrl(): string
|
||||
{
|
||||
return "/mod/download/$this->id/{$this->latestVersion->version}";
|
||||
}
|
||||
|
||||
/**
|
||||
* The relationship between a mod and its users.
|
||||
*
|
||||
|
@ -130,4 +130,9 @@ class ModVersion extends Model
|
||||
->orderByDesc('version_patch')
|
||||
->orderByDesc('version_pre_release');
|
||||
}
|
||||
|
||||
public function downloadUrl(): string
|
||||
{
|
||||
return "/mod/download/$this->mod_id/$this->version";
|
||||
}
|
||||
}
|
||||
|
@ -12,8 +12,11 @@ use App\Observers\ModObserver;
|
||||
use App\Observers\ModVersionObserver;
|
||||
use App\Observers\SptVersionObserver;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Cache\RateLimiting\Limit;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Facades\RateLimiter;
|
||||
use Illuminate\Support\Number;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
@ -44,6 +47,10 @@ class AppServiceProvider extends ServiceProvider
|
||||
Gate::define('viewPulse', function (User $user) {
|
||||
return $user->isAdmin();
|
||||
});
|
||||
|
||||
RateLimiter::for('modDownloads', function (Request $request) {
|
||||
return Limit::perMinute(3)->by($request->user()?->id ?: $request->ip());
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -54,7 +54,7 @@
|
||||
</div>
|
||||
|
||||
{{-- Mobile Download Button --}}
|
||||
<a href="{{ $mod->latestVersion->link }}" class="block lg:hidden">
|
||||
<a href="{{ $mod->downloadUrl() }}" class="block lg:hidden">
|
||||
<button class="text-lg font-extrabold hover:bg-cyan-400 dark:hover:bg-cyan-600 shadow-md dark:shadow-gray-950 drop-shadow-2xl bg-cyan-500 dark:bg-cyan-700 rounded-xl w-full h-20">{{ __('Download Latest Version') }} ({{ $mod->latestVersion->version }})</button>
|
||||
</a>
|
||||
|
||||
@ -102,7 +102,7 @@
|
||||
<div class="p-4 mb-4 sm:p-6 bg-white dark:bg-gray-950 rounded-xl shadow-md dark:shadow-gray-950 drop-shadow-2xl">
|
||||
<div class="pb-6 border-b-2 border-gray-200 dark:border-gray-800">
|
||||
<div class="flex items-center justify-between">
|
||||
<a class="text-2xl font-extrabold" href="{{ $version->link }}">
|
||||
<a class="text-2xl font-extrabold" href="{{ $version->downloadUrl() }}">
|
||||
{{ __('Version') }} {{ $version->version }}
|
||||
</a>
|
||||
<p class="text-gray-700 dark:text-gray-300" title="{{ __('Exactly') }} {{ $version->downloads }}">{{ Number::downloads($version->downloads) }} {{ __('Downloads') }}</p>
|
||||
@ -147,7 +147,7 @@
|
||||
<div class="col-span-1 flex flex-col gap-6">
|
||||
|
||||
{{-- Desktop Download Button --}}
|
||||
<a href="{{ $mod->latestVersion->link }}" class="hidden lg:block">
|
||||
<a href="{{ $mod->downloadUrl() }}" class="hidden lg:block">
|
||||
<button class="text-lg font-extrabold hover:bg-cyan-400 dark:hover:bg-cyan-600 shadow-md dark:shadow-gray-950 drop-shadow-2xl bg-cyan-500 dark:bg-cyan-700 rounded-xl w-full h-20">{{ __('Download Latest Version') }} ({{ $mod->latestVersion->version }})</button>
|
||||
</a>
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\ModController;
|
||||
use App\Http\Controllers\ModVersionController;
|
||||
use App\Http\Controllers\UserController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
@ -15,6 +16,10 @@ Route::middleware(['auth.banned'])->group(function () {
|
||||
Route::get('/mod/{mod}/{slug}', 'show')->where(['mod' => '[0-9]+'])->name('mod.show');
|
||||
});
|
||||
|
||||
Route::middleware(['throttle:modDownloads'])->controller(ModVersionController::class)->group(function () {
|
||||
Route::get('/mod/download/{mod}/{version}', 'show')->where(['mod' => '[0-9]+']);
|
||||
});
|
||||
|
||||
Route::controller(UserController::class)->group(function () {
|
||||
Route::get('/user/{user}/{username}', 'show')->where(['user' => '[0-9]+'])->name('user.show');
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user