Skip to content

Commit 625f3cd

Browse files
authored
Merge pull request #354 from zigzagdev/feat/sort-ordering-id
feat: add ID-based sorting
2 parents 0c493ea + 5277fb6 commit 625f3cd

File tree

6 files changed

+82
-25
lines changed

6 files changed

+82
-25
lines changed

src/app/Packages/Domains/Test/QueryService/WorldHeritageQueryService_getAllHeritagesTest.php

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class WorldHeritageQueryService_getAllHeritagesTest extends TestCase
2222
private const CURRENT_PAGE = 1;
2323
private const PER_PAGE = 10;
2424

25+
private const ORDER = 'asc';
26+
private const OPPOSITE_ORDER = 'desc';
27+
2528
protected function setUp(): void
2629
{
2730
parent::setUp();
@@ -58,21 +61,73 @@ private function refresh(): void
5861
}
5962
}
6063

61-
public function test_fetch_data_check_type(): void
64+
public function test_fetch_data_check_type_asc(): void
65+
{
66+
$result = $this->queryService->getAllHeritages(
67+
self::CURRENT_PAGE,
68+
self::PER_PAGE,
69+
self::ORDER
70+
);
71+
72+
$this->assertInstanceOf(PaginationDto::class, $result);
73+
}
74+
75+
public function test_fetch_data_check_type_desc(): void
6276
{
6377
$result = $this->queryService->getAllHeritages(
6478
self::CURRENT_PAGE,
65-
self::PER_PAGE
79+
self::PER_PAGE,
80+
self::OPPOSITE_ORDER
6681
);
6782

6883
$this->assertInstanceOf(PaginationDto::class, $result);
6984
}
7085

71-
public function test_fetch_data_check_value(): void
86+
public function test_fetch_data_check_value_asc(): void
87+
{
88+
$result = $this->queryService->getAllHeritages(
89+
self::CURRENT_PAGE,
90+
self::PER_PAGE,
91+
self::ORDER
92+
);
93+
94+
$arrayResult = $result->toArray();
95+
96+
$this->assertArrayHasKey('items', $arrayResult);
97+
$this->assertArrayHasKey('pagination', $arrayResult);
98+
99+
$this->assertIsArray($arrayResult['items']);
100+
$this->assertIsArray($arrayResult['pagination']);
101+
102+
$this->assertSame([
103+
'current_page',
104+
'per_page',
105+
'total',
106+
'last_page',
107+
'from',
108+
'to',
109+
'path',
110+
'first_page_url',
111+
'last_page_url',
112+
'next_page_url',
113+
'prev_page_url',
114+
'links'
115+
], array_keys($arrayResult['pagination']));
116+
117+
// whether data id is sorted in ascending order
118+
$items = $arrayResult['items'];
119+
$ids = array_column($items, 'id');
120+
$sortedIds = $ids;
121+
sort($sortedIds);
122+
$this->assertSame($sortedIds, $ids);
123+
}
124+
125+
public function test_fetch_data_check_value_desc(): void
72126
{
73127
$result = $this->queryService->getAllHeritages(
74128
self::CURRENT_PAGE,
75-
self::PER_PAGE
129+
self::PER_PAGE,
130+
self::OPPOSITE_ORDER
76131
);
77132

78133
$arrayResult = $result->toArray();
@@ -97,5 +152,12 @@ public function test_fetch_data_check_value(): void
97152
'prev_page_url',
98153
'links'
99154
], array_keys($arrayResult['pagination']));
155+
156+
// whether data id is sorted in descending order
157+
$items = $arrayResult['items'];
158+
$ids = array_column($items, 'id');
159+
$sortedIds = $ids;
160+
rsort($sortedIds);
161+
$this->assertSame($sortedIds, $ids);
100162
}
101163
}

src/app/Packages/Domains/WorldHeritageQueryService.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@ public function __construct(
2727
/**
2828
* 一覧(最大30件): サムネのみ、state_party/state_party_code を要件通りに整形
2929
*/
30-
public function getAllHeritages(int $currentPage, int $perPage): PaginationDto
30+
public function getAllHeritages(
31+
int $currentPage,
32+
int $perPage,
33+
string $order
34+
): PaginationDto
3135
{
3236
$items = WorldHeritage::query()
3337
->select([
@@ -57,7 +61,7 @@ public function getAllHeritages(int $currentPage, int $perPage): PaginationDto
5761
]);
5862
}
5963
])
60-
->orderBy('world_heritage_sites.id', 'asc')
64+
->orderBy('world_heritage_sites.id', $order)
6165
->paginate($perPage, page: $currentPage);
6266

6367
$array = $items->map(fn($heritage) => $this->buildWorldHeritagePayload($heritage))->all();

src/app/Packages/Domains/WorldHeritageReadQueryService.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
class WorldHeritageReadQueryService implements WorldHeritageReadQueryServiceInterface
1010
{
1111
public function __construct(
12-
private WorldHeritage $model,
1312
) {}
1413

1514
public function findByIdsPreserveOrder(array $ids): Collection

src/app/Packages/Features/Controller/WorldHeritageController.php

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,13 @@
22

33
namespace App\Packages\Features\Controller;
44

5-
use App\Common\Pagination\PaginationViewModel;
65
use App\Http\Controllers\Controller;
7-
use App\Packages\Features\QueryUseCases\Factory\ListQuery\UpdateWorldHeritageListQueryCollectionFactory;
8-
use App\Packages\Features\QueryUseCases\Factory\ListQuery\UpdateWorldHeritageListQueryFactory;
9-
use App\Packages\Features\QueryUseCases\Factory\ViewModel\WorldHeritageViewModelCollectionFactory;
10-
use App\Packages\Features\QueryUseCases\UseCase\CreateWorldHeritageUseCase;
11-
use App\Packages\Features\QueryUseCases\UseCase\CreateWorldManyHeritagesUseCase;
12-
use App\Packages\Features\QueryUseCases\UseCase\DeleteWorldHeritagesUseCase;
13-
use App\Packages\Features\QueryUseCases\UseCase\DeleteWorldHeritageUseCase;
14-
use App\Packages\Features\QueryUseCases\UseCase\GetWorldHeritageByIdsUseCase;
156
use App\Packages\Features\QueryUseCases\UseCase\GetWorldHeritageByIdUseCase;
167
use App\Packages\Features\QueryUseCases\UseCase\SearchWorldHeritagesWithAlgoliaUseCase;
17-
use App\Packages\Features\QueryUseCases\UseCase\UpdateWorldHeritagesUseCase;
18-
use App\Packages\Features\QueryUseCases\UseCase\UpdateWorldHeritageUseCase;
198
use App\Packages\Features\QueryUseCases\ViewModel\WorldHeritageViewModel;
209
use App\Packages\Features\QueryUseCases\UseCase\GetWorldHeritagesUseCase;
21-
use Exception;
2210
use Illuminate\Http\JsonResponse;
2311
use Illuminate\Http\Request;
24-
use Illuminate\Support\Facades\DB;
2512
use InvalidArgumentException;
2613

2714
class WorldHeritageController extends Controller
@@ -33,8 +20,9 @@ public function getWorldHeritages(
3320
{
3421
$currentPage = $request->get('current_page', 1);
3522
$perPage = $request->get('per_page', 30);
23+
$order = $request->get('order', 'asc');
3624

37-
$dto = $useCase->handle($currentPage, $perPage);
25+
$dto = $useCase->handle($currentPage, $perPage, $order);
3826

3927
return response()->json([
4028
'status' => 'success',
@@ -69,6 +57,7 @@ public function searchWorldHeritages(
6957
{
7058
$currentPage = (int) $request->query('current_page', 1);
7159
$perPage = (int) $request->query('per_page', 30);
60+
$order = $request->get('order', 'asc');
7261
$keyword = $request->query('search_query');
7362
if ($keyword === null || trim((string) $keyword) === '') {
7463
$keyword = $request->query('keyword');
@@ -83,7 +72,7 @@ public function searchWorldHeritages(
8372
$request->query('year_inscribed_from'),
8473
$request->query('year_inscribed_to'),
8574
$currentPage,
86-
$perPage
75+
$perPage,
8776
);
8877

8978
return response()->json([

src/app/Packages/Features/QueryUseCases/QueryServiceInterface/WorldHeritageQueryServiceInterface.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ interface WorldHeritageQueryServiceInterface
1111
{
1212
public function getAllHeritages(
1313
int $currentPage,
14-
int $perPage
14+
int $perPage,
15+
string $order
1516
): PaginationDto;
1617

1718
public function getHeritageById(

src/app/Packages/Features/QueryUseCases/UseCase/GetWorldHeritagesUseCase.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@ public function __construct(
1414

1515
public function handle(
1616
int $currentPage,
17-
int $perPage
17+
int $perPage,
18+
string $order = 'asc'
1819
): PaginationDto
1920
{
2021
return $this->worldHeritageQueryService->getAllHeritages(
2122
$currentPage,
22-
$perPage
23+
$perPage,
24+
$order
2325
);
2426
}
2527
}

0 commit comments

Comments
 (0)