diff --git a/module/Common/src/Entity/AbstractEntity.php b/module/Common/src/Entity/AbstractEntity.php
index 8b71b4ec..b798a087 100644
--- a/module/Common/src/Entity/AbstractEntity.php
+++ b/module/Common/src/Entity/AbstractEntity.php
@@ -8,26 +8,19 @@ use Doctrine\ORM\Mapping as ORM;
abstract class AbstractEntity
{
/**
- * @var int
+ * @var string
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Column(name="id", type="bigint", options={"unsigned"=true})
*/
protected $id;
- /**
- * @return int
- */
- public function getId()
+ public function getId(): string
{
return $this->id;
}
- /**
- * @param int $id
- * @return $this
- */
- public function setId($id)
+ public function setId(string $id): self
{
$this->id = $id;
return $this;
diff --git a/module/Core/src/Entity/ShortUrl.php b/module/Core/src/Entity/ShortUrl.php
index def81f01..48f597f3 100644
--- a/module/Core/src/Entity/ShortUrl.php
+++ b/module/Core/src/Entity/ShortUrl.php
@@ -7,13 +7,14 @@ use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Shlinkio\Shlink\Common\Entity\AbstractEntity;
+use Shlinkio\Shlink\Core\Repository\ShortUrlRepository;
/**
* Class ShortUrl
* @author
* @link
*
- * @ORM\Entity(repositoryClass="Shlinkio\Shlink\Core\Repository\ShortUrlRepository")
+ * @ORM\Entity(repositoryClass=ShortUrlRepository::class)
* @ORM\Table(name="short_urls")
*/
class ShortUrl extends AbstractEntity
@@ -22,7 +23,7 @@ class ShortUrl extends AbstractEntity
* @var string
* @ORM\Column(name="original_url", type="string", nullable=false, length=1024)
*/
- protected $originalUrl;
+ private $originalUrl;
/**
* @var string
* @ORM\Column(
@@ -33,17 +34,17 @@ class ShortUrl extends AbstractEntity
* unique=true
* )
*/
- protected $shortCode;
+ private $shortCode;
/**
* @var \DateTime
* @ORM\Column(name="date_created", type="datetime")
*/
- protected $dateCreated;
+ private $dateCreated;
/**
* @var Collection|Visit[]
* @ORM\OneToMany(targetEntity=Visit::class, mappedBy="shortUrl", fetch="EXTRA_LAZY")
*/
- protected $visits;
+ private $visits;
/**
* @var Collection|Tag[]
* @ORM\ManyToMany(targetEntity=Tag::class, cascade={"persist"})
@@ -53,46 +54,36 @@ class ShortUrl extends AbstractEntity
* @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
* })
*/
- protected $tags;
+ private $tags;
/**
* @var \DateTime
* @ORM\Column(name="valid_since", type="datetime", nullable=true)
*/
- protected $validSince;
+ private $validSince;
/**
* @var \DateTime
* @ORM\Column(name="valid_until", type="datetime", nullable=true)
*/
- protected $validUntil;
+ private $validUntil;
/**
* @var integer
* @ORM\Column(name="max_visits", type="integer", nullable=true)
*/
- protected $maxVisits;
+ private $maxVisits;
- /**
- * ShortUrl constructor.
- */
public function __construct()
{
+ $this->shortCode = '';
$this->dateCreated = new \DateTime();
$this->visits = new ArrayCollection();
- $this->shortCode = '';
$this->tags = new ArrayCollection();
}
- /**
- * @return string
- */
public function getLongUrl(): string
{
return $this->originalUrl;
}
- /**
- * @param string $longUrl
- * @return $this
- */
public function setLongUrl(string $longUrl): self
{
$this->originalUrl = $longUrl;
@@ -100,7 +91,6 @@ class ShortUrl extends AbstractEntity
}
/**
- * @return string
* @deprecated Use getLongUrl() instead
*/
public function getOriginalUrl(): string
@@ -109,8 +99,6 @@ class ShortUrl extends AbstractEntity
}
/**
- * @param string $originalUrl
- * @return $this
* @deprecated Use setLongUrl() instead
*/
public function setOriginalUrl(string $originalUrl): self
@@ -118,37 +106,23 @@ class ShortUrl extends AbstractEntity
return $this->setLongUrl($originalUrl);
}
- /**
- * @return string
- */
public function getShortCode(): string
{
return $this->shortCode;
}
- /**
- * @param string $shortCode
- * @return $this
- */
- public function setShortCode(string $shortCode)
+ public function setShortCode(string $shortCode): self
{
$this->shortCode = $shortCode;
return $this;
}
- /**
- * @return \DateTime
- */
public function getDateCreated(): \DateTime
{
return $this->dateCreated;
}
- /**
- * @param \DateTime $dateCreated
- * @return $this
- */
- public function setDateCreated(\DateTime $dateCreated)
+ public function setDateCreated(\DateTime $dateCreated): self
{
$this->dateCreated = $dateCreated;
return $this;
@@ -164,55 +138,36 @@ class ShortUrl extends AbstractEntity
/**
* @param Collection|Tag[] $tags
- * @return $this
*/
- public function setTags(Collection $tags)
+ public function setTags(Collection $tags): self
{
$this->tags = $tags;
return $this;
}
- /**
- * @param Tag $tag
- * @return $this
- */
- public function addTag(Tag $tag)
+ public function addTag(Tag $tag): self
{
$this->tags->add($tag);
return $this;
}
- /**
- * @return \DateTime|null
- */
- public function getValidSince()
+ public function getValidSince(): ?\DateTime
{
return $this->validSince;
}
- /**
- * @param \DateTime|null $validSince
- * @return $this|self
- */
- public function setValidSince($validSince): self
+ public function setValidSince(?\DateTime $validSince): self
{
$this->validSince = $validSince;
return $this;
}
- /**
- * @return \DateTime|null
- */
- public function getValidUntil()
+ public function getValidUntil(): ?\DateTime
{
return $this->validUntil;
}
- /**
- * @param \DateTime|null $validUntil
- * @return $this|self
- */
- public function setValidUntil($validUntil): self
+ public function setValidUntil(?\DateTime $validUntil): self
{
$this->validUntil = $validUntil;
return $this;
@@ -224,7 +179,7 @@ class ShortUrl extends AbstractEntity
}
/**
- * @param Collection $visits
+ * @param Collection|Visit[] $visits
* @return ShortUrl
* @internal
*/
@@ -234,19 +189,12 @@ class ShortUrl extends AbstractEntity
return $this;
}
- /**
- * @return int|null
- */
- public function getMaxVisits()
+ public function getMaxVisits(): ?int
{
return $this->maxVisits;
}
- /**
- * @param int|null $maxVisits
- * @return $this|self
- */
- public function setMaxVisits($maxVisits): self
+ public function setMaxVisits(?int $maxVisits): self
{
$this->maxVisits = $maxVisits;
return $this;
diff --git a/module/Core/src/Entity/Tag.php b/module/Core/src/Entity/Tag.php
index cd895268..aad6b713 100644
--- a/module/Core/src/Entity/Tag.php
+++ b/module/Core/src/Entity/Tag.php
@@ -21,39 +21,25 @@ class Tag extends AbstractEntity implements \JsonSerializable
* @var string
* @ORM\Column(unique=true)
*/
- protected $name;
+ private $name;
public function __construct($name = null)
{
$this->name = $name;
}
- /**
- * @return string
- */
- public function getName()
+ public function getName(): string
{
return $this->name;
}
- /**
- * @param string $name
- * @return $this
- */
- public function setName($name)
+ public function setName(string $name)
{
$this->name = $name;
return $this;
}
- /**
- * Specify data which should be serialized to JSON
- * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
- * @return mixed data which can be serialized by json_encode,
- * which is a value of any type other than a resource.
- * @since 5.4.0
- */
- public function jsonSerialize()
+ public function jsonSerialize(): string
{
return $this->name;
}
diff --git a/module/Core/src/Entity/Visit.php b/module/Core/src/Entity/Visit.php
index 9390005c..f23657d4 100644
--- a/module/Core/src/Entity/Visit.php
+++ b/module/Core/src/Entity/Visit.php
@@ -7,13 +7,14 @@ use Doctrine\ORM\Mapping as ORM;
use Shlinkio\Shlink\Common\Entity\AbstractEntity;
use Shlinkio\Shlink\Common\Exception\WrongIpException;
use Shlinkio\Shlink\Common\Util\IpAddress;
+use Shlinkio\Shlink\Core\Repository\VisitRepository;
/**
* Class Visit
* @author
* @link
*
- * @ORM\Entity(repositoryClass="Shlinkio\Shlink\Core\Repository\VisitRepository")
+ * @ORM\Entity(repositoryClass=VisitRepository::class)
* @ORM\Table(name="visits")
*/
class Visit extends AbstractEntity implements \JsonSerializable
diff --git a/module/Core/src/Entity/VisitLocation.php b/module/Core/src/Entity/VisitLocation.php
index ca30596a..2027f7e3 100644
--- a/module/Core/src/Entity/VisitLocation.php
+++ b/module/Core/src/Entity/VisitLocation.php
@@ -21,159 +21,110 @@ class VisitLocation extends AbstractEntity implements ArraySerializableInterface
* @var string
* @ORM\Column(nullable=true)
*/
- protected $countryCode;
+ private $countryCode;
/**
* @var string
* @ORM\Column(nullable=true)
*/
- protected $countryName;
+ private $countryName;
/**
* @var string
* @ORM\Column(nullable=true)
*/
- protected $regionName;
+ private $regionName;
/**
* @var string
* @ORM\Column(nullable=true)
*/
- protected $cityName;
+ private $cityName;
/**
* @var string
* @ORM\Column(nullable=true)
*/
- protected $latitude;
+ private $latitude;
/**
* @var string
* @ORM\Column(nullable=true)
*/
- protected $longitude;
+ private $longitude;
/**
* @var string
* @ORM\Column(nullable=true)
*/
- protected $timezone;
+ private $timezone;
- /**
- * @return string
- */
- public function getCountryCode()
+ public function getCountryCode(): string
{
- return $this->countryCode;
+ return $this->countryCode ?? '';
}
- /**
- * @param string $countryCode
- * @return $this
- */
- public function setCountryCode($countryCode)
+ public function setCountryCode(string $countryCode)
{
$this->countryCode = $countryCode;
return $this;
}
- /**
- * @return string
- */
- public function getCountryName()
+ public function getCountryName(): string
{
- return $this->countryName;
+ return $this->countryName ?? '';
}
- /**
- * @param string $countryName
- * @return $this
- */
- public function setCountryName($countryName)
+ public function setCountryName(string $countryName): self
{
$this->countryName = $countryName;
return $this;
}
- /**
- * @return string
- */
- public function getRegionName()
+ public function getRegionName(): string
{
- return $this->regionName;
+ return $this->regionName ?? '';
}
- /**
- * @param string $regionName
- * @return $this
- */
- public function setRegionName($regionName)
+ public function setRegionName(string $regionName): self
{
$this->regionName = $regionName;
return $this;
}
- /**
- * @return string
- */
- public function getCityName()
+ public function getCityName(): string
{
- return $this->cityName;
+ return $this->cityName ?? '';
}
- /**
- * @param string $cityName
- * @return $this
- */
- public function setCityName($cityName)
+ public function setCityName(string $cityName): self
{
$this->cityName = $cityName;
return $this;
}
- /**
- * @return string
- */
- public function getLatitude()
+ public function getLatitude(): string
{
- return $this->latitude;
+ return $this->latitude ?? '';
}
- /**
- * @param string $latitude
- * @return $this
- */
- public function setLatitude($latitude)
+ public function setLatitude(string $latitude): self
{
$this->latitude = $latitude;
return $this;
}
- /**
- * @return string
- */
- public function getLongitude()
+ public function getLongitude(): string
{
- return $this->longitude;
+ return $this->longitude ?? '';
}
- /**
- * @param string $longitude
- * @return $this
- */
- public function setLongitude($longitude)
+ public function setLongitude(string $longitude): self
{
$this->longitude = $longitude;
return $this;
}
- /**
- * @return string
- */
- public function getTimezone()
+ public function getTimezone(): string
{
- return $this->timezone;
+ return $this->timezone ?? '';
}
- /**
- * @param string $timezone
- * @return $this
- */
- public function setTimezone($timezone)
+ public function setTimezone(string $timezone): self
{
$this->timezone = $timezone;
return $this;
@@ -181,41 +132,36 @@ class VisitLocation extends AbstractEntity implements ArraySerializableInterface
/**
* Exchange internal values from provided array
- *
- * @param array $array
- * @return void
*/
- public function exchangeArray(array $array)
+ public function exchangeArray(array $array): void
{
- if (array_key_exists('country_code', $array)) {
+ if (\array_key_exists('country_code', $array)) {
$this->setCountryCode($array['country_code']);
}
- if (array_key_exists('country_name', $array)) {
+ if (\array_key_exists('country_name', $array)) {
$this->setCountryName($array['country_name']);
}
- if (array_key_exists('region_name', $array)) {
+ if (\array_key_exists('region_name', $array)) {
$this->setRegionName($array['region_name']);
}
- if (array_key_exists('city', $array)) {
+ if (\array_key_exists('city', $array)) {
$this->setCityName($array['city']);
}
- if (array_key_exists('latitude', $array)) {
+ if (\array_key_exists('latitude', $array)) {
$this->setLatitude($array['latitude']);
}
- if (array_key_exists('longitude', $array)) {
+ if (\array_key_exists('longitude', $array)) {
$this->setLongitude($array['longitude']);
}
- if (array_key_exists('time_zone', $array)) {
+ if (\array_key_exists('time_zone', $array)) {
$this->setTimezone($array['time_zone']);
}
}
/**
* Return an array representation of the object
- *
- * @return array
*/
- public function getArrayCopy()
+ public function getArrayCopy(): array
{
return [
'countryCode' => $this->countryCode,
@@ -228,14 +174,7 @@ class VisitLocation extends AbstractEntity implements ArraySerializableInterface
];
}
- /**
- * Specify data which should be serialized to JSON
- * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
- * @return mixed data which can be serialized by json_encode,
- * which is a value of any type other than a resource.
- * @since 5.4.0
- */
- public function jsonSerialize()
+ public function jsonSerialize(): array
{
return $this->getArrayCopy();
}
diff --git a/module/Core/test/Service/UrlShortenerTest.php b/module/Core/test/Service/UrlShortenerTest.php
index 234240b7..44a759b7 100644
--- a/module/Core/test/Service/UrlShortenerTest.php
+++ b/module/Core/test/Service/UrlShortenerTest.php
@@ -54,7 +54,7 @@ class UrlShortenerTest extends TestCase
$this->em->persist(Argument::any())->will(function ($arguments) {
/** @var ShortUrl $shortUrl */
$shortUrl = $arguments[0];
- $shortUrl->setId(10);
+ $shortUrl->setId('10');
});
$repo = $this->prophesize(ObjectRepository::class);
$repo->findOneBy(Argument::any())->willReturn(null);
diff --git a/module/Rest/src/Entity/ApiKey.php b/module/Rest/src/Entity/ApiKey.php
index fe475c3a..2246f909 100644
--- a/module/Rest/src/Entity/ApiKey.php
+++ b/module/Rest/src/Entity/ApiKey.php
@@ -23,17 +23,17 @@ class ApiKey extends AbstractEntity
* @var string
* @ORM\Column(name="`key`", nullable=false, unique=true)
*/
- protected $key;
+ private $key;
/**
* @var \DateTime|null
* @ORM\Column(name="expiration_date", nullable=true, type="datetime")
*/
- protected $expirationDate;
+ private $expirationDate;
/**
* @var bool
* @ORM\Column(type="boolean")
*/
- protected $enabled;
+ private $enabled;
public function __construct()
{
@@ -41,45 +41,28 @@ class ApiKey extends AbstractEntity
$this->key = $this->generateV4Uuid();
}
- /**
- * @return string
- */
public function getKey(): string
{
return $this->key;
}
- /**
- * @param string $key
- * @return $this
- */
- public function setKey($key): self
+ public function setKey(string $key): self
{
$this->key = $key;
return $this;
}
- /**
- * @return \DateTime|null
- */
public function getExpirationDate(): ?\DateTime
{
return $this->expirationDate;
}
- /**
- * @param \DateTime $expirationDate
- * @return $this
- */
- public function setExpirationDate($expirationDate): self
+ public function setExpirationDate(\DateTime $expirationDate): self
{
$this->expirationDate = $expirationDate;
return $this;
}
- /**
- * @return bool
- */
public function isExpired(): bool
{
if ($this->expirationDate === null) {
@@ -89,29 +72,17 @@ class ApiKey extends AbstractEntity
return $this->expirationDate < new \DateTime();
}
- /**
- * @return boolean
- */
public function isEnabled(): bool
{
return $this->enabled;
}
- /**
- * @param boolean $enabled
- * @return $this
- */
- public function setEnabled($enabled): self
+ public function setEnabled(bool $enabled): self
{
$this->enabled = $enabled;
return $this;
}
- /**
- * Disables this API key
- *
- * @return $this
- */
public function disable(): self
{
return $this->setEnabled(false);
@@ -119,19 +90,12 @@ class ApiKey extends AbstractEntity
/**
* Tells if this api key is enabled and not expired
- *
- * @return bool
*/
public function isValid(): bool
{
return $this->isEnabled() && ! $this->isExpired();
}
- /**
- * The string representation of an API key is the key itself
- *
- * @return string
- */
public function __toString(): string
{
return $this->getKey();
diff --git a/module/Rest/test/Action/AuthenticateActionTest.php b/module/Rest/test/Action/AuthenticateActionTest.php
index 4825a100..131efb6d 100644
--- a/module/Rest/test/Action/AuthenticateActionTest.php
+++ b/module/Rest/test/Action/AuthenticateActionTest.php
@@ -55,7 +55,7 @@ class AuthenticateActionTest extends TestCase
*/
public function properApiKeyReturnsTokenInResponse()
{
- $this->apiKeyService->getByKey('foo')->willReturn((new ApiKey())->setId(5))
+ $this->apiKeyService->getByKey('foo')->willReturn((new ApiKey())->setId('5'))
->shouldBeCalledTimes(1);
$request = ServerRequestFactory::fromGlobals()->withParsedBody([
diff --git a/module/Rest/test/Authentication/JWTServiceTest.php b/module/Rest/test/Authentication/JWTServiceTest.php
index a80680f8..e592e865 100644
--- a/module/Rest/test/Authentication/JWTServiceTest.php
+++ b/module/Rest/test/Authentication/JWTServiceTest.php
@@ -30,7 +30,7 @@ class JWTServiceTest extends TestCase
*/
public function tokenIsProperlyCreated()
{
- $id = 34;
+ $id = '34';
$token = $this->service->create((new ApiKey())->setId($id));
$payload = (array) JWT::decode($token, 'foo', [JWTService::DEFAULT_ENCRYPTION_ALG]);
$this->assertGreaterThanOrEqual($payload['iat'], time());