Open driesvints opened 2 years ago
I like the two classes approach - would only add a cached()
method on the Facade so that users can easily use it like.
GithubSponsors::cached()->isSponsoredBy('Gummibeer');
Hello guys! If you don't mind I'd like to work on this (this is my first public contribution so I want to make sure that I understand what do you require 😅)
I'll try to rephrase the proposed solution to make sure that I'm following:
interface GitHubSponsorsInterface
{
public function isSponsoredBy(string $account, string $sponsor, bool $isAccountAnOrganization = false): bool;
...
}
final class GitHubSponsors implements GitHubSponsorsInterface
{
// ...
}
final class CachedGitHubSponsors implements GitHubSponsorsInterface
{
// ...
}
CacheDriver
interface and inject it into the CachedGitHubSponsors
, so that the developers can swap the Cache driver at any timefinal class CachedGitHubSponsors implements GitHubSponsorsInterface
{
public function __construct(
private GitHubSponsors $client,
private CacheDriver $cacheDriver
) {}
}
Client
method that requires calling the Github Api (like isSponsoredBy
), we will check if the Cache driver instance already has cached the result, if it's empty we will call the Api then cache it.Please forgive me if that's not what you want and I've wasted your time 😅🙏
Heya! Thanks for willing to help out. We'll need to rethink this quite a bit since the internals have changed in the meantime. I atm don't have time for this so we'll need to hold off on this until I can find some time to wrap my head around it.
Performing GraphQL calls can be costly and take quite a bit of time. Ideally I'd like to have dedicated caching support in the library. Most calls to check for sponsorships of GitHub users or to retrieve a list of sponsors don't need to be checked every second.
The way I see it we can ship a decorator for the
GitHubSponsors
client. This would look like as follows:Maybe a common interface is needed?
I think this class should require a
Psr\SimpleCache\CacheInterface
implementation to handle the caching. For Laravel it can be retrieved from the already set cache store. We can add options to thegithub-sponsors.php
config file to set the specific cache store and timeouts.