diff --git a/data/migrations/Version20200323190014.php b/data/migrations/Version20200323190014.php new file mode 100644 index 00000000..fe3c340d --- /dev/null +++ b/data/migrations/Version20200323190014.php @@ -0,0 +1,44 @@ +getTable('visit_locations'); + $this->skipIf($visitLocations->hasColumn('is_empty')); + + $visitLocations->addColumn('is_empty', Types::BOOLEAN, ['default' => false]); + } + + public function postUp(Schema $schema): void + { + $qb = $this->connection->createQueryBuilder(); + $qb->update('visit_locations') + ->set('is_empty', true) + ->where($qb->expr()->eq('country_code', ':empty')) + ->andWhere($qb->expr()->eq('country_name', ':empty')) + ->andWhere($qb->expr()->eq('region_name', ':empty')) + ->andWhere($qb->expr()->eq('city_name', ':empty')) + ->andWhere($qb->expr()->eq('timezone', ':empty')) + ->andWhere($qb->expr()->eq('lat', 0)) + ->andWhere($qb->expr()->eq('lon', 0)) + ->setParameter('empty', '') + ->execute(); + } + + public function down(Schema $schema): void + { + $visitLocations = $schema->getTable('visit_locations'); + $this->skipIf(!$visitLocations->hasColumn('is_empty')); + + $visitLocations->dropColumn('is_empty'); + } +} diff --git a/module/Core/config/entities-mappings/Shlinkio.Shlink.Core.Entity.VisitLocation.php b/module/Core/config/entities-mappings/Shlinkio.Shlink.Core.Entity.VisitLocation.php index fde00abc..955fa1fa 100644 --- a/module/Core/config/entities-mappings/Shlinkio.Shlink.Core.Entity.VisitLocation.php +++ b/module/Core/config/entities-mappings/Shlinkio.Shlink.Core.Entity.VisitLocation.php @@ -44,4 +44,10 @@ return static function (ClassMetadata $metadata, array $emConfig): void { ->columnName('lon') ->nullable(false) ->build(); + + $builder->createField('isEmpty', Types::BOOLEAN) + ->columnName('is_empty') + ->option('default', false) + ->nullable(false) + ->build(); }; diff --git a/module/Core/src/Entity/VisitLocation.php b/module/Core/src/Entity/VisitLocation.php index 641b078e..ef545bba 100644 --- a/module/Core/src/Entity/VisitLocation.php +++ b/module/Core/src/Entity/VisitLocation.php @@ -17,6 +17,7 @@ class VisitLocation extends AbstractEntity implements VisitLocationInterface private float $latitude; private float $longitude; private string $timezone; + private bool $isEmpty; public function __construct(Location $location) { @@ -43,6 +44,11 @@ class VisitLocation extends AbstractEntity implements VisitLocationInterface return $this->cityName; } + public function isEmpty(): bool + { + return $this->isEmpty; + } + private function exchangeLocationInfo(Location $info): void { $this->countryCode = $info->countryCode(); @@ -52,6 +58,15 @@ class VisitLocation extends AbstractEntity implements VisitLocationInterface $this->latitude = $info->latitude(); $this->longitude = $info->longitude(); $this->timezone = $info->timeZone(); + $this->isEmpty = ( + $this->countryCode === '' && + $this->countryName === '' && + $this->regionName === '' && + $this->cityName === '' && + $this->latitude === 0.0 && + $this->longitude === 0.0 && + $this->timezone === '' + ); } public function jsonSerialize(): array @@ -64,18 +79,7 @@ class VisitLocation extends AbstractEntity implements VisitLocationInterface 'latitude' => $this->latitude, 'longitude' => $this->longitude, 'timezone' => $this->timezone, + 'isEmpty' => $this->isEmpty, ]; } - - public function isEmpty(): bool - { - return - $this->countryCode === '' && - $this->countryName === '' && - $this->regionName === '' && - $this->cityName === '' && - $this->latitude === 0.0 && - $this->longitude === 0.0 && - $this->timezone === ''; - } }