feat: try sync calories
This commit is contained in:
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
|
||||
use App\Enums\WorkoutSource;
|
||||
use App\Http\Requests\StravaCallbackRequest;
|
||||
use App\Http\Requests\StravaSyncRequest;
|
||||
use App\Models\StravaConnection;
|
||||
use App\Models\WorkoutSessions;
|
||||
use App\Services\StravaClient;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
@@ -111,11 +112,13 @@ class StravaController extends Controller
|
||||
], 422);
|
||||
}
|
||||
|
||||
$activities = $strava->activities(
|
||||
$activities = collect($strava->activities(
|
||||
$connection,
|
||||
$request->integer('page', 1),
|
||||
$request->integer('per_page', 30),
|
||||
);
|
||||
))
|
||||
->map(fn (array $activity): array => $this->activityForStorage($strava, $connection, $activity))
|
||||
->all();
|
||||
|
||||
$importedCount = collect($activities)
|
||||
->map(fn (array $activity): WorkoutSessions => $this->storeActivity($request, $activity))
|
||||
@@ -144,6 +147,15 @@ class StravaController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
private function activityForStorage(StravaClient $strava, StravaConnection $connection, array $activity): array
|
||||
{
|
||||
if (array_key_exists('calories', $activity) || empty($activity['id'])) {
|
||||
return $activity;
|
||||
}
|
||||
|
||||
return array_replace($activity, $strava->activity($connection, $activity['id']));
|
||||
}
|
||||
|
||||
private function canReadActivities(array $scopes): bool
|
||||
{
|
||||
return in_array('activity:read', $scopes, true)
|
||||
|
||||
@@ -79,6 +79,20 @@ class StravaClient
|
||||
->json();
|
||||
}
|
||||
|
||||
public function activity(StravaConnection $connection, int|string $activityId): array
|
||||
{
|
||||
return Http::baseUrl('https://www.strava.com/api/v3')
|
||||
->withToken($this->accessToken($connection))
|
||||
->timeout(10)
|
||||
->connectTimeout(3)
|
||||
->retry([100, 500, 1000])
|
||||
->get("/activities/{$activityId}", [
|
||||
'include_all_efforts' => false,
|
||||
])
|
||||
->throw()
|
||||
->json();
|
||||
}
|
||||
|
||||
private function accessToken(StravaConnection $connection): string
|
||||
{
|
||||
if (! $connection->expires_at || $connection->expires_at->lte(now()->addMinutes(5))) {
|
||||
|
||||
Reference in New Issue
Block a user