This repository has been archived by the owner on Oct 19, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathRouteController.php
142 lines (125 loc) · 4.49 KB
/
RouteController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
/**
* This file remains to the GTFS-REST-API - Copyright (c) 2020.
*
* @author Sebastian Knopf
* @license http://opensource.org/licenses/MIT MIT
*/
namespace App\Controller;
use App\Google\Transit\Route\Route;
use Slim\Http\ServerRequest;
/**
* Route controller class for every request according to the routes resource.
*
* @package App\Controller
*/
class RouteController extends BaseController
{
/**
* Default selector method - Returns all route objects in the database.
*
* @param ServerRequest $request The server request instance
* @return mixed Array with all routes
*/
protected function getAll(ServerRequest $request) {
$query = $this->orm
->select(Route::class)
->with([
'agency'
])
->limit($this->requestLimit)
->offset($this->requestOffset);
// try to sort routes by route sort order
// if not applicable: try sorting by short or long name
try {
$orderedQuery = clone $query;
$orderedQuery->orderBy('route_sort_order');
$orderedQuery->fetchRecords();
$query = $orderedQuery;
} catch (\Exception $e1) {
try {
$orderedQuery = clone $query;
$orderedQuery->orderBy('route_short_name');
$orderedQuery->fetchRecords();
$query = $orderedQuery;
} catch (\Exception $e2) {
$query->orderBy('route_long_name');
}
}
return $query->fetchRecords();
}
/**
* Selects a single route by its routeId.
*
* @param ServerRequest $request The server request instance
* @return mixed Array with matching route object(s)
*/
protected function getByRouteId(ServerRequest $request) {
$requestRouteId = $request->getParam('routeId', null);
if ($requestRouteId == null) {
throw new \RuntimeException('missing parameter routeId!');
}
$query = $this->orm
->select(Route::class)
->with([
'agency'
])
->where('route_id = ', $requestRouteId);
return [$query->fetchRecord()];
}
/**
* Selects routes by their routeShortName or routeLongName.
*
* @param ServerRequest $request The server request instance
* @return mixed Array with matching route object(s)
*/
protected function getByRouteName(ServerRequest $request) {
$requestRouteName = $request->getParam('routeName', null);
if ($requestRouteName == null) {
throw new \RuntimeException('missing parameter routeName!');
}
$query = $this->orm
->select(Route::class)
->with([
'agency'
])
->limit($this->requestLimit)
->offset($this->requestOffset);
// need cascading try/catch blocks here, because route_short_name and route_long_name are conditionally required.
// thus one of these fields might be missing and fire an exception during the query.
try {
$whereQuery = clone $query;
$whereQuery->where('route_short_name LIKE ', '%' . $requestRouteName . '%')
->orWhere('route_long_name LIKE ', '%' . $requestRouteName . '%');
$whereQuery->fetchRecords();
$query = $whereQuery;
} catch(\Exception $eb) {
try {
$whereQuery = clone $query;
$whereQuery->where('route_short_name LIKE ', '%' . $requestRouteName . '%');
$whereQuery->fetchRecords();
$query = $whereQuery;
} catch(\Exception $es) {
$query->where('route_long_name LIKE ', '%' . $requestRouteName . '%');
}
}
// try to sort routes by route sort order
// if not applicable: try sorting by short or long name
try {
$orderedQuery = clone $query;
$orderedQuery->orderBy('route_sort_order');
$orderedQuery->fetchRecords();
$query = $orderedQuery;
} catch (\Exception $e1) {
try {
$orderedQuery = clone $query;
$orderedQuery->orderBy('route_short_name');
$orderedQuery->fetchRecords();
$query = $orderedQuery;
} catch (\Exception $e2) {
$query->orderBy('route_long_name');
}
}
return $query->fetchRecords();
}
}