1<?php
2
3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0.
4// See the LICENCE file in the repository root for full licence text.
5
6declare(strict_types=1);
7
8namespace App\Http\Middleware;
9
10use Closure;
11use Illuminate\Http\Request;
12
13class RequestCost
14{
15 public static function getCost(Request $request): int
16 {
17 return $request->attributes->get('request_cost', 1);
18 }
19
20 public static function setCost(int $cost, ?Request $request = null)
21 {
22 // max(1, ) is a convenience for callers that use count()
23 ($request ?? request())->attributes->set('request_cost', max(1, $cost));
24 }
25
26 public function handle(Request $request, Closure $next, int $cost = 1)
27 {
28 static::setCost($cost, $request);
29
30 return $next($request);
31 }
32}