* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ declare(strict_types=1); namespace Komarev\GitHubProfileViewsCounter; use Contracts\Komarev\GitHubProfileViewsCounter\CounterRepositoryInterface; use PDO; final class CounterPdoRepository implements CounterRepositoryInterface { private PDO $connection; private string $tableName; public function __construct(PDO $connection, string $tableName = null) { $this->connection = $connection; $this->tableName = $tableName !== null ? $tableName : 'github_profile_views'; } public function getViewsCountByUsername(Username $username): int { $statement = $this->connection->prepare( 'SELECT COUNT(*) FROM ' . $this->tableName . ' WHERE username = :username;' ); $statement->bindParam('username', $username); $statement->execute(); return (int) $statement->fetchColumn(0); } public function addViewByUsername(Username $username): void { $statement = $this->connection->prepare( 'INSERT INTO ' . $this->tableName . ' (username, created_at) VALUES (:username, NOW());' ); $statement->bindParam('username', $username); $statement->execute(); } }