*/ private array $links = []; /** @var array */ private array $clicks = []; public function save(SmartLink $link): void { $this->links[$link->id->toString()] = $link; } public function findById(SmartLinkId $id): ?SmartLink { return $this->links[$id->toString()] ?? null; } public function findByShortCode(ShortCode $shortCode): ?SmartLink { foreach ($this->links as $link) { if ($link->shortCode->equals($shortCode)) { return $link; } } return null; } public function findByUserId(string $userId, ?LinkStatus $status = null): array { $result = []; foreach ($this->links as $link) { if ($link->userId === $userId) { if ($status === null || $link->status === $status) { $result[] = $link; } } } return $result; } public function existsShortCode(ShortCode $shortCode): bool { return $this->findByShortCode($shortCode) !== null; } public function delete(SmartLinkId $id): void { unset($this->links[$id->toString()]); } public function findActiveLinks(): array { return array_filter( $this->links, fn(SmartLink $link) => $link->status === LinkStatus::ACTIVE ); } public function getTotalClicks(SmartLinkId $id): int { return $this->clicks[$id->toString()] ?? 0; } // Test helpers public function clear(): void { $this->links = []; $this->clicks = []; } public function setClicks(SmartLinkId $id, int $clicks): void { $this->clicks[$id->toString()] = $clicks; } }