pinguimdolaravel / laravel-api-externas

8 stars 4 forks source link

Duvidas sobre BaseEndpoint #1

Open Geovanek opened 1 year ago

Geovanek commented 1 year ago

Fala pia,

Estou tentando implementar essa ideia para uma API que quero consumir no projeto que estou desenvolvendo, mas fiquei com uma dúvida sobre como passar as variáveis de access_token de um usuário para o método construtor, principalmente por que no BaseEndpoint é sempre chamado novamente o serviço.

Vou colocar meu código:

Comando:

public function handle()
    {
        $user = User::with(['socialProvider' => function($query) {
                $query->where('provider', 'strava');
            }])
            ->find(373);

        $token = $user->socialProvider->first();

        $service = new StravaService(
            $token->provider_access_token, 
            $token->provider_refresh_token, 
            $token->provider_expires_at,
            $user->id,
            $token->provider_user_id,
        );

        $json = $service->activities()->get();

        dd($json);

        return Command::SUCCESS;
    }

No StravaService o método construtor:

public function __construct(
        private string $accessToken,
        private string $refreshToken,
        private int $expiresAt,
        private int $userId,
        private int $providerUserId,
    )
    {
        if (Carbon::now()->timestamp > $this->expiresAt) {
            $this->accessToken = $this->refreshTokens();
        }

        $this->api = Http::withToken($this->accessToken)
            ->baseUrl('https://www.strava.com/api/v3');
    }

Agora minha dúvida é como faço lá no BaseEndpoint, pois ele requer todas as variáveis novamente.

class BaseEndpoint
{
    protected StravaService $service;

    public function __construct()
    {
        $this->service = new StravaService(); //Expected 5 arguments
    }

    protected function transform(mixed $json, string $entity): Collection
    {
        return collect($json)
            ->map(fn ($data) => new $entity($data));
    }
}

Se conseguir me ajudar, estou meio boiando.

wesllycode commented 3 weeks ago

Conseguiu resolver @Geovanek ?