Skip to content

Commit 1c119d8

Browse files
committed
ditch v1 url versioning, yuck
1 parent 8dde8d7 commit 1c119d8

File tree

12 files changed

+230
-60
lines changed

12 files changed

+230
-60
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
<?php
22

3-
namespace App\Http\Controllers\Api\V1;
3+
namespace App\Http\Controllers\Api;
44

55
use App\Http\Controllers\Controller;
6+
use App\Http\Resources\CircuitResource;
7+
use App\Http\Resources\CircuitCollection;
68
use App\Models\Circuit;
79
use Illuminate\Http\Request;
8-
use Illuminate\Http\JsonResponse;
910

1011
class CircuitController extends Controller
1112
{
1213
/**
1314
* Display a listing of the resource.
1415
*/
15-
public function index(): JsonResponse
16+
public function index(): CircuitCollection
1617
{
17-
return response()->json(Circuit::all());
18+
return new CircuitCollection(Circuit::all());
1819
}
1920

2021
/**
2122
* Store a newly created resource in storage.
2223
*/
23-
public function store(Request $request): JsonResponse
24+
public function store(Request $request): CircuitResource
2425
{
2526
$validated = $request->validate([
2627
'name' => 'required|string',
@@ -29,30 +30,30 @@ public function store(Request $request): JsonResponse
2930

3031
$circuit = Circuit::create($validated);
3132

32-
return response()->json($circuit, 201);
33+
return new CircuitResource($circuit);
3334
}
3435

3536
/**
3637
* Display the specified resource.
3738
*/
3839
public function show(string $id)
3940
{
40-
//
41+
// Not implemented
4142
}
4243

4344
/**
4445
* Update the specified resource in storage.
4546
*/
4647
public function update(Request $request, string $id)
4748
{
48-
//
49+
// Not implemented
4950
}
5051

5152
/**
5253
* Remove the specified resource from storage.
5354
*/
5455
public function destroy(string $id)
5556
{
56-
//
57+
// Not implemented
5758
}
5859
}
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
<?php
22

3-
namespace App\Http\Controllers\Api\V1;
3+
namespace App\Http\Controllers\Api;
44

55
use App\Http\Controllers\Controller;
6+
use App\Http\Resources\DriverResource;
7+
use App\Http\Resources\DriverCollection;
68
use App\Models\Driver;
79
use Illuminate\Http\Request;
8-
use Illuminate\Http\JsonResponse;
910

1011
class DriverController extends Controller
1112
{
1213
/**
1314
* Display a listing of the resource.
1415
*/
15-
public function index(): JsonResponse
16+
public function index(): DriverCollection
1617
{
17-
return response()->json(Driver::all());
18+
return new DriverCollection(Driver::all());
1819
}
1920

2021
/**
2122
* Store a newly created resource in storage.
2223
*/
23-
public function store(Request $request): JsonResponse
24+
public function store(Request $request): DriverResource
2425
{
2526
$validated = $request->validate([
2627
'name' => 'required|string',
@@ -29,30 +30,30 @@ public function store(Request $request): JsonResponse
2930

3031
$driver = Driver::create($validated);
3132

32-
return response()->json($driver, 201);
33+
return new DriverResource($driver);
3334
}
3435

3536
/**
3637
* Display the specified resource.
3738
*/
3839
public function show(string $id)
3940
{
40-
//
41+
// Not implemented
4142
}
4243

4344
/**
4445
* Update the specified resource in storage.
4546
*/
4647
public function update(Request $request, string $id)
4748
{
48-
//
49+
// Not implemented
4950
}
5051

5152
/**
5253
* Remove the specified resource from storage.
5354
*/
5455
public function destroy(string $id)
5556
{
56-
//
57+
// Not implemented
5758
}
5859
}

frameworks-laravel/app/Http/Controllers/Api/V1/HealthController.php renamed to frameworks-laravel/app/Http/Controllers/Api/HealthController.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace App\Http\Controllers\Api\V1;
3+
namespace App\Http\Controllers\Api;
44

55
use App\Http\Controllers\Controller;
66
use Illuminate\Http\JsonResponse;
@@ -11,7 +11,7 @@ public function show(): JsonResponse
1111
{
1212
return response()->json([
1313
'status' => 'healthy',
14-
'version' => 'v1',
14+
'version' => 'unversioned',
1515
'timestamp' => now()->toIso8601String(),
1616
]);
1717
}

frameworks-laravel/app/Http/Controllers/Api/V1/LapTimeController.php renamed to frameworks-laravel/app/Http/Controllers/Api/LapTimeController.php

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
<?php
22

3-
namespace App\Http\Controllers\Api\V1;
3+
namespace App\Http\Controllers\Api;
44

55
use App\Http\Controllers\Controller;
6+
use App\Http\Resources\LapTimeResource;
7+
use App\Http\Resources\LapTimeCollection;
68
use App\Models\LapTime;
79
use Illuminate\Http\Request;
8-
use Illuminate\Http\JsonResponse;
910

1011
class LapTimeController extends Controller
1112
{
1213
/**
1314
* Display a listing of the resource.
1415
*/
15-
public function index(Request $request): JsonResponse
16+
public function index(Request $request): LapTimeCollection
1617
{
1718
$query = LapTime::query();
1819

@@ -32,13 +33,13 @@ public function index(Request $request): JsonResponse
3233
$query->where('lap_number', '<=', $request->lap_max);
3334
}
3435

35-
return response()->json($query->get());
36+
return new LapTimeCollection($query->get());
3637
}
3738

3839
/**
3940
* Store a newly created resource in storage.
4041
*/
41-
public function store(Request $request): JsonResponse
42+
public function store(Request $request): LapTimeResource
4243
{
4344
$validated = $request->validate([
4445
'driver_id' => 'required|integer|exists:drivers,id',
@@ -49,48 +50,48 @@ public function store(Request $request): JsonResponse
4950

5051
$lapTime = LapTime::create($validated);
5152

52-
return response()->json($lapTime, 201);
53+
return new LapTimeResource($lapTime);
5354
}
5455

5556
/**
5657
* Get lap times for a specific driver.
5758
*/
58-
public function byDriver(string $driverId): JsonResponse
59+
public function byDriver(string $driverId): LapTimeCollection
5960
{
6061
$lapTimes = LapTime::where('driver_id', $driverId)->get();
61-
return response()->json($lapTimes);
62+
return new LapTimeCollection($lapTimes);
6263
}
6364

6465
/**
6566
* Get lap times for a specific circuit.
6667
*/
67-
public function byCircuit(string $circuitId): JsonResponse
68+
public function byCircuit(string $circuitId): LapTimeCollection
6869
{
6970
$lapTimes = LapTime::where('circuit_id', $circuitId)->get();
70-
return response()->json($lapTimes);
71+
return new LapTimeCollection($lapTimes);
7172
}
7273

7374
/**
7475
* Display the specified resource.
7576
*/
7677
public function show(string $id)
7778
{
78-
//
79+
// Not implemented
7980
}
8081

8182
/**
8283
* Update the specified resource in storage.
8384
*/
8485
public function update(Request $request, string $id)
8586
{
86-
//
87+
// Not implemented
8788
}
8889

8990
/**
9091
* Remove the specified resource from storage.
9192
*/
9293
public function destroy(string $id)
9394
{
94-
//
95+
// Not implemented
9596
}
9697
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Http\Resources;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Http\Resources\Json\ResourceCollection;
7+
8+
class CircuitCollection extends ResourceCollection
9+
{
10+
public $collects = CircuitResource::class;
11+
12+
public function toArray(Request $request): array
13+
{
14+
return parent::toArray($request);
15+
}
16+
17+
public function with(Request $request): array
18+
{
19+
return [
20+
'meta' => [
21+
'count' => $this->collection->count(),
22+
],
23+
];
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Http\Resources;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Http\Resources\Json\JsonResource;
7+
8+
class CircuitResource extends JsonResource
9+
{
10+
/**
11+
* Transform the resource into an array.
12+
*
13+
* @return array<string, mixed>
14+
*/
15+
public function toArray(Request $request): array
16+
{
17+
return [
18+
'id' => $this->id,
19+
'name' => $this->name,
20+
'location' => $this->location,
21+
'created_at' => $this->created_at,
22+
'updated_at' => $this->updated_at,
23+
];
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Http\Resources;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Http\Resources\Json\ResourceCollection;
7+
8+
class DriverCollection extends ResourceCollection
9+
{
10+
public $collects = DriverResource::class;
11+
12+
public function toArray(Request $request): array
13+
{
14+
return parent::toArray($request);
15+
}
16+
17+
public function with(Request $request): array
18+
{
19+
return [
20+
'meta' => [
21+
'count' => $this->collection->count(),
22+
],
23+
];
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Http\Resources;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Http\Resources\Json\JsonResource;
7+
8+
class DriverResource extends JsonResource
9+
{
10+
/**
11+
* Transform the resource into an array.
12+
*
13+
* @return array<string, mixed>
14+
*/
15+
public function toArray(Request $request): array
16+
{
17+
return [
18+
'id' => $this->id,
19+
'name' => $this->name,
20+
'code' => $this->code,
21+
'created_at' => $this->created_at,
22+
'updated_at' => $this->updated_at,
23+
];
24+
}
25+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace App\Http\Resources;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Http\Resources\Json\ResourceCollection;
7+
8+
class LapTimeCollection extends ResourceCollection
9+
{
10+
/**
11+
* The resource that this resource collects.
12+
*
13+
* This ensures each item is transformed by LapTimeResource.
14+
*/
15+
public $collects = LapTimeResource::class;
16+
17+
/**
18+
* Transform the resource collection into an array.
19+
*
20+
* @return array<string, mixed>
21+
*/
22+
public function toArray(Request $request): array
23+
{
24+
// By default, ResourceCollection will map each item using $collects
25+
// Returning parent::toArray preserves Laravel's standard shape
26+
return parent::toArray($request);
27+
}
28+
29+
/**
30+
* Get additional data that should be returned with the resource array.
31+
*
32+
* @return array<string, mixed>
33+
*/
34+
public function with(Request $request): array
35+
{
36+
return [
37+
'meta' => [
38+
'count' => $this->collection->count(),
39+
],
40+
];
41+
}
42+
}

0 commit comments

Comments
 (0)