|
3 | 3 | namespace App\Providers; |
4 | 4 |
|
5 | 5 | use App\Enums\VersionEnum; |
6 | | -use Illuminate\Routing\Route; |
7 | | -use Illuminate\Routing\RouteRegistrar; |
8 | | -use Illuminate\Support\Facades\Route as RouteFacade; |
9 | 6 | use Illuminate\Support\ServiceProvider; |
| 7 | +use RonasIT\Support\Contracts\VersionEnumContract; |
10 | 8 |
|
11 | 9 | class AppServiceProvider extends ServiceProvider |
12 | 10 | { |
13 | 11 | public function boot(): void |
14 | 12 | { |
15 | | - /** |
16 | | - * Specify that the route version must be in the range of given values inclusive. |
17 | | - * |
18 | | - * @param VersionEnum|null $start |
19 | | - * @param VersionEnum|null $end |
20 | | - * @param string|null $param (default is 'version') |
21 | | - * @param Route|null $instance |
22 | | - * |
23 | | - * @return Route|RouteRegistrar |
24 | | - */ |
25 | | - $versionRange = function (?VersionEnum $start, ?VersionEnum $end, ?string $param, ?Route $instance = null) { |
26 | | - if (!$param) { |
27 | | - $param = 'version'; |
28 | | - } |
29 | | - |
30 | | - $versions = array_diff(VersionEnum::values(), config('app.disabled_api_versions')); |
31 | | - |
32 | | - $versions = array_filter($versions, function ($version) use ($start, $end) { |
33 | | - $result = true; |
34 | | - |
35 | | - if (!empty($start)) { |
36 | | - $result &= version_compare($version, $start->value, '>='); |
37 | | - } |
38 | | - |
39 | | - if (!empty($end)) { |
40 | | - $result &= version_compare($version, $end->value, '<='); |
41 | | - } |
42 | | - |
43 | | - return $result; |
44 | | - }); |
45 | | - |
46 | | - return (!empty($instance)) |
47 | | - ? $instance->whereIn($param, $versions) |
48 | | - : RouteFacade::whereIn($param, $versions); |
49 | | - }; |
50 | | - |
51 | | - Route::macro('versionRange', fn (VersionEnum $from, VersionEnum $to, $param = null) => $versionRange($from, $to, $param, $this)); |
52 | | - |
53 | | - Route::macro('versionFrom', fn (VersionEnum $from, $param = null) => $versionRange($from, null, $param, $this)); |
54 | | - |
55 | | - Route::macro('versionTo', fn (VersionEnum $to, $param = null) => $versionRange(null, $to, $param, $this)); |
56 | | - |
57 | | - RouteFacade::macro('versionRange', fn (VersionEnum $from, VersionEnum $to, $param = null) => $versionRange($from, $to, $param)); |
58 | | - |
59 | | - RouteFacade::macro('versionFrom', fn (VersionEnum $from, $param = null) => $versionRange($from, null, $param)); |
60 | | - |
61 | | - RouteFacade::macro('versionTo', fn (VersionEnum $to, $param = null) => $versionRange(null, $to, $param)); |
62 | | - |
63 | | - RouteFacade::macro('version', fn (VersionEnum $version) => RouteFacade::prefix('v' . $version->value)); |
64 | 13 | } |
65 | 14 |
|
66 | 15 | public function register() |
67 | 16 | { |
| 17 | + $this->app->bind(VersionEnumContract::class, fn () => VersionEnum::class); |
68 | 18 | } |
69 | 19 | } |
0 commit comments