Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 9bc023de

Přidáno uživatelem Cajova-Houba před téměř 7 roky(ů)

refs #6975: Cors middleware zmenen z globalniho na lokalni (kvuli stahovani), pridan endpoint pro stazeni dat ve formatu csv.

Zobrazit rozdíly:

backend/app/Http/Controllers/DeviceController.php
12 12
use App\Model\Zarizeni;
13 13
use App\Model\Zaznam;
14 14
use Illuminate\Http\Request;
15
use phpDocumentor\Reflection\Types\Array_;
16
use phpDocumentor\Reflection\Types\Mixed_;
15 17

  
16 18
class DeviceController extends Controller
17 19
{
......
55 57
     * @param $id
56 58
     * @return \Symfony\Component\HttpFoundation\Response
57 59
     */
58
    public function getDeviceById(Request $request, $id)
60
    public function getDeviceByIdWithTraffic(Request $request, $id)
59 61
    {
62
        $device = $this->getDeviceById($id);
63
        if ($device != null) {
64
            $device->traffics = $this->findTrafficByDevice($request, $id);
65
            return json_encode($device);
66
        } else {
67
            return response('Not found.', 404);
68
        }
69
    }
60 70

  
71
    /**
72
     * Vrati zarizeni podle id, nebo null, pokud neni nalezeno.
73
     *
74
     * @param $id
75
     * @return Zarizeni
76
     */
77
    public function getDeviceById($id) {
78
        return Zarizeni::findByIdJoinAddress($id);
79
    }
80

  
81
    /**
82
     * Vrati zaznamy o doprave pro dane zarizeni. Request obsahuje dodatecne url parametry.
83
     *
84
     * @param Request $request
85
     * @param $deviceId
86
     */
87
    public function findTrafficByDevice(Request $request, $deviceId) {
61 88
        // nacti parametry
62 89
        $params = $this->loadDateTimeDirectionConstraints($request);
63 90
        $dateFrom = $params[self::DATE_FROM_PARAM];
......
66 93
        $timeTo = $params[self::TIME_TO_PARAM];
67 94
        $direction = $params[self::DIRECTION_PARAM];
68 95

  
69
        $device = Zarizeni::findByIdJoinAddress($id);
96
        return Zaznam::findByDevice($deviceId, $dateFrom, $dateTo, $timeFrom, $timeTo, $direction);
97
    }
98

  
99
    /**
100
     * Nacte zarizeni spolecne se vsemi jeho zaznamy (podle url parametru) a vrati je jako stahnutelny csv soubor.
101
     * Csv bude obsahovat udaje o zarizeni na prvni radce, udaje o doprave na nasledujicich.
102
     *
103
     * Pokud zarizeni nebylo nalezeno, je vracena 404.
104
     *
105
     * @param Request $request
106
     * @param $id
107
     * @return Mixed_
108
     */
109
    public function getDeviceByIdAsCsv(Request $request, $id) {
110
        $device = $this->getDeviceById($id);
111

  
70 112
        if ($device != null) {
71
            $device->traffics = Zaznam::findByDevice($id, $dateFrom, $dateTo, $timeFrom, $timeTo, $direction);
72
            return json_encode($device);
113
            $devArray = json_decode(json_encode($device), true);
114
            // tmp file
115
            $tmpFileName = 'doprava-export-'.time().'.csv';
116
            $tmpFilePath = tempnam(sys_get_temp_dir(), $tmpFileName);
117
            $df = fopen($tmpFilePath, 'w');
118

  
119
            // hlavicka pro zarizeni
120
            fputcsv($df, array_keys($devArray));
121
            fputcsv($df, $devArray);
122

  
123
            // zaznamy o doprave
124
            $traffic = $this->findTrafficByDevice($request, $id);
125
            if ($traffic != null && count($traffic) > 0) {
126

  
127
                // hlavicka pro zaznamy
128
                $tr = $this->stdClassToArray($traffic[0]);
129
                fputcsv($df, array_keys($tr));
130

  
131
                // samotna data
132
                foreach ($traffic as $tr) {
133
                    $tr = $this->stdClassToArray($tr);
134
                    fputcsv($df, $tr);
135
                }
136
            }
137
            fclose($df);
138
            return response()->download($tmpFilePath, $tmpFileName, array())->deleteFileAfterSend(true);
73 139
        } else {
74 140
            return response('Not found.', 404);
75 141
        }
76 142
    }
77 143

  
144
    /**
145
     * Konvertuje objekt typu stdClass na pole pomoci funkci json_decode(), json_encode().
146
     *
147
     * @param $object
148
     * @return Array_
149
     */
150
    private function stdClassToArray($object) {
151
        return json_decode(json_encode($object), true);
152
    }
153

  
78 154
    public function getTrafficAverageByDevice(Request $request, $id)
79 155
    {
80 156
        // nacti parametry
backend/app/Http/routes.php
24 24
 * Vrati seznam mericich zarizeni.
25 25
 */
26 26
$app->get($apiUrlRoot.'devices', [
27
    'middleware' => 'jwtauth',
27
    'middleware' => ['cors', 'jwtauth'],
28 28
    'uses' => 'DeviceController@getDevice'
29 29
]);
30 30

  
......
33 33
 * Vrati zaznamy o doprav e za casovy usek pro dane zarizeni.
34 34
 */
35 35
$app->get($apiUrlRoot.'devices/{id}', [
36
    'middleware' => ['cors', 'jwtauth'],
37
    'uses' => 'DeviceController@getDeviceByIdWithTraffic'
38
]);
39

  
40
$app->get($apiUrlRoot.'devices/{id}/csv', [
36 41
    'middleware' => 'jwtauth',
37
    'uses' => 'DeviceController@getDeviceById'
42
    'uses' => 'DeviceController@getDeviceByIdAsCsv'
38 43
]);
39 44

  
40 45
/**
41 46
 * Vrati prumery dopravy pro danze zarizeni za casovy usek.
42 47
 */
43 48
$app->get($apiUrlRoot.'devices/{id}/time-period', [
44
   'middleware' => 'jwtauth',
49
    'middleware' => ['cors', 'jwtauth'],
45 50
    'uses' => 'DeviceController@getTrafficAverageByDevice'
46 51
]);
47 52

  
......
50 55
 * Vrati vsechny typy aut.
51 56
 */
52 57
$app->get($apiUrlRoot.'vehicles', [
53
    'middleware' => 'jwtauth',
58
    'middleware' => ['cors', 'jwtauth'],
54 59
    'uses' => 'VehicleController@getAll'
55 60
]);
56 61

  
......
58 63
 * Vrati vsechna mesta.
59 64
 */
60 65
$app->get($apiUrlRoot.'cities', [
61
    'middleware' => 'jwtauth',
66
    'middleware' => ['cors', 'jwtauth'],
62 67
    'uses' => 'LocationController@getCities'
63 68
]);
64 69

  
backend/bootstrap/app.php
61 61

  
62 62
$app->routeMiddleware([
63 63
    'jwtauth' => App\Http\Middleware\JWTAuthenticate::class,
64
    'cors' => App\Http\Middleware\CorsMiddleware::class
64 65
]);
65 66

  
66 67
/**
67 68
 * Cors middleware, ktery zpracuje OPTION requesty.
68 69
 */
69
$app->middleware([
70
App\Http\Middleware\CorsMiddleware::class
71
]);
70
//$app->middleware([
71
//]);
72 72

  
73 73
// $app->routeMiddleware([
74 74
//     'auth' => App\Http\Middleware\Authenticate::class,

Také k dispozici: Unified diff