add Meteo part
This commit is contained in:
@@ -128,7 +128,7 @@ class AuthController extends Controller
|
||||
|
||||
public function user(Request $request): JsonResponse
|
||||
{
|
||||
$user = $request->user();
|
||||
$user = $request->user()->load('locations');
|
||||
|
||||
return response()->json(new AuthUserResource($user));
|
||||
}
|
||||
|
||||
22
app/Http/Controllers/LocationController.php
Normal file
22
app/Http/Controllers/LocationController.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Resources\AuthUserResource;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class LocationController extends Controller
|
||||
{
|
||||
public function store(Request $request)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'latitude' => ['required', 'decimal:3,5'],
|
||||
'longitude' => ['required', 'decimal:3,5'],
|
||||
]);
|
||||
|
||||
$user = $request->user();
|
||||
$user->locations()->create($data);
|
||||
|
||||
return response()->json(new AuthUserResource($user->load('locations')));
|
||||
}
|
||||
}
|
||||
45
app/Http/Controllers/WeatherController.php
Normal file
45
app/Http/Controllers/WeatherController.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Exception;
|
||||
use GuzzleHttp\Client;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class WeatherController extends Controller
|
||||
{
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
abort_if($request->user()->locations->count() === 0, 404, 'Coordonnées non renseignées dans le profile.');
|
||||
|
||||
$location = $request->user()->locations->first();
|
||||
$idCity = 6427013;
|
||||
$apiKey = config('weather.open_weather_map_api_key');
|
||||
|
||||
try {
|
||||
$response = Cache::remember('weather-'.$location->id, 5 * 60, function () use ($location, $apiKey) {
|
||||
// $url = 'https://api.openweathermap.org/data/2.5/forecast?id='.$idCity.'&appid='.$apiKey.$params;
|
||||
$params = '&units=metric&lang=fr';
|
||||
$url = 'https://api.openweathermap.org/data/2.5/forecast?lat='.$location->latitude.'&lon='.$location->longitude.'&appid='.$apiKey.$params;
|
||||
$client = new Client();
|
||||
$promise = $client->requestAsync('GET', $url);
|
||||
$response = $promise->wait();
|
||||
|
||||
return json_decode($response->getBody()->getContents());
|
||||
});
|
||||
|
||||
return response()->json($response);
|
||||
} catch (Exception $e) {
|
||||
Log::alert('unable to fetch data', [
|
||||
'ip' => $request->ip(),
|
||||
'code' => $e->getCode(),
|
||||
'message' => $e->getMessage(),
|
||||
]);
|
||||
|
||||
return response()->json('unable to fetch data', 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ class AuthUserResource extends JsonResource
|
||||
'id' => $this->id,
|
||||
'name' => $this->name,
|
||||
'email' => $this->email,
|
||||
'locations' => LocationResource::collection($this->whenLoaded('locations')),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
24
app/Http/Resources/LocationResource.php
Normal file
24
app/Http/Resources/LocationResource.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class LocationResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function toArray(Request $request): array
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'user_id' => $this->user_id,
|
||||
'latitude' => $this->latitude,
|
||||
'longitude' => $this->longitude,
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user