From 0e04968bc281446b6ee90764c75157c9e415dcd2 Mon Sep 17 00:00:00 2001
From: Alejandro Celaya <alejandro@alejandrocelaya.com>
Date: Tue, 31 Dec 2019 23:37:49 +0100
Subject: [PATCH] Changed latitude and longitude to float

---
 docs/swagger/definitions/VisitLocation.json   |  4 ++--
 .../v1_short-urls_{shortCode}_visits.json     |  4 ++--
 module/Core/src/Entity/VisitLocation.php      | 24 +++++++++----------
 .../src/Visit/Model/UnknownVisitLocation.php  | 12 +++++-----
 .../Visit/Model/VisitLocationInterface.php    |  4 ++--
 module/Core/test/Entity/VisitLocationTest.php | 10 --------
 6 files changed, 24 insertions(+), 34 deletions(-)

diff --git a/docs/swagger/definitions/VisitLocation.json b/docs/swagger/definitions/VisitLocation.json
index e4c9fc90..7e2fa18c 100644
--- a/docs/swagger/definitions/VisitLocation.json
+++ b/docs/swagger/definitions/VisitLocation.json
@@ -11,10 +11,10 @@
             "type": "string"
         },
         "latitude": {
-            "type": "string"
+            "type": "number"
         },
         "longitude": {
-            "type": "string"
+            "type": "number"
         },
         "regionName": {
             "type": "string"
diff --git a/docs/swagger/paths/v1_short-urls_{shortCode}_visits.json b/docs/swagger/paths/v1_short-urls_{shortCode}_visits.json
index 4d1c1c6a..2369ba13 100644
--- a/docs/swagger/paths/v1_short-urls_{shortCode}_visits.json
+++ b/docs/swagger/paths/v1_short-urls_{shortCode}_visits.json
@@ -105,8 +105,8 @@
                                         "cityName": "Cupertino",
                                         "countryCode": "US",
                                         "countryName": "United States",
-                                        "latitude": "37.3042",
-                                        "longitude": "-122.0946",
+                                        "latitude": 37.3042,
+                                        "longitude": -122.0946,
                                         "regionName": "California",
                                         "timezone": "America/Los_Angeles"
                                     }
diff --git a/module/Core/src/Entity/VisitLocation.php b/module/Core/src/Entity/VisitLocation.php
index ebc8829a..641b078e 100644
--- a/module/Core/src/Entity/VisitLocation.php
+++ b/module/Core/src/Entity/VisitLocation.php
@@ -14,8 +14,8 @@ class VisitLocation extends AbstractEntity implements VisitLocationInterface
     private string $countryName;
     private string $regionName;
     private string $cityName;
-    private string $latitude; // FIXME Should be float
-    private string $longitude; // FIXME Should be float
+    private float $latitude;
+    private float $longitude;
     private string $timezone;
 
     public function __construct(Location $location)
@@ -25,22 +25,22 @@ class VisitLocation extends AbstractEntity implements VisitLocationInterface
 
     public function getCountryName(): string
     {
-        return $this->countryName ?? '';
+        return $this->countryName;
     }
 
-    public function getLatitude(): string
+    public function getLatitude(): float
     {
-        return $this->latitude ?? '';
+        return $this->latitude;
     }
 
-    public function getLongitude(): string
+    public function getLongitude(): float
     {
-        return $this->longitude ?? '';
+        return $this->longitude;
     }
 
     public function getCityName(): string
     {
-        return $this->cityName ?? '';
+        return $this->cityName;
     }
 
     private function exchangeLocationInfo(Location $info): void
@@ -49,8 +49,8 @@ class VisitLocation extends AbstractEntity implements VisitLocationInterface
         $this->countryName = $info->countryName();
         $this->regionName = $info->regionName();
         $this->cityName = $info->city();
-        $this->latitude = (string) $info->latitude();
-        $this->longitude = (string) $info->longitude();
+        $this->latitude = $info->latitude();
+        $this->longitude = $info->longitude();
         $this->timezone = $info->timeZone();
     }
 
@@ -74,8 +74,8 @@ class VisitLocation extends AbstractEntity implements VisitLocationInterface
             $this->countryName === '' &&
             $this->regionName === '' &&
             $this->cityName === '' &&
-            ((float) $this->latitude) === 0.0 &&
-            ((float) $this->longitude) === 0.0 &&
+            $this->latitude === 0.0 &&
+            $this->longitude === 0.0 &&
             $this->timezone === '';
     }
 }
diff --git a/module/Core/src/Visit/Model/UnknownVisitLocation.php b/module/Core/src/Visit/Model/UnknownVisitLocation.php
index baf056b4..b8926bd5 100644
--- a/module/Core/src/Visit/Model/UnknownVisitLocation.php
+++ b/module/Core/src/Visit/Model/UnknownVisitLocation.php
@@ -11,14 +11,14 @@ final class UnknownVisitLocation implements VisitLocationInterface
         return 'Unknown';
     }
 
-    public function getLatitude(): string
+    public function getLatitude(): float
     {
-        return '0.0';
+        return 0.0;
     }
 
-    public function getLongitude(): string
+    public function getLongitude(): float
     {
-        return '0.0';
+        return 0.0;
     }
 
     public function getCityName(): string
@@ -33,8 +33,8 @@ final class UnknownVisitLocation implements VisitLocationInterface
             'countryName' => 'Unknown',
             'regionName' => 'Unknown',
             'cityName' => 'Unknown',
-            'latitude' => '0.0',
-            'longitude' => '0.0',
+            'latitude' => 0.0,
+            'longitude' => 0.0,
             'timezone' => 'Unknown',
         ];
     }
diff --git a/module/Core/src/Visit/Model/VisitLocationInterface.php b/module/Core/src/Visit/Model/VisitLocationInterface.php
index 992e138f..9a296a28 100644
--- a/module/Core/src/Visit/Model/VisitLocationInterface.php
+++ b/module/Core/src/Visit/Model/VisitLocationInterface.php
@@ -10,9 +10,9 @@ interface VisitLocationInterface extends JsonSerializable
 {
     public function getCountryName(): string;
 
-    public function getLatitude(): string;
+    public function getLatitude(): float;
 
-    public function getLongitude(): string;
+    public function getLongitude(): float;
 
     public function getCityName(): string;
 }
diff --git a/module/Core/test/Entity/VisitLocationTest.php b/module/Core/test/Entity/VisitLocationTest.php
index 2ea4befa..f662645d 100644
--- a/module/Core/test/Entity/VisitLocationTest.php
+++ b/module/Core/test/Entity/VisitLocationTest.php
@@ -10,16 +10,6 @@ use Shlinkio\Shlink\IpGeolocation\Model\Location;
 
 class VisitLocationTest extends TestCase
 {
-    /** @test */
-    public function valuesFoundWhenExchangingArrayAreCastToString(): void
-    {
-        $payload = new Location('', '', '', '', 1000.7, -2000.4, '');
-        $location = new VisitLocation($payload);
-
-        $this->assertSame('1000.7', $location->getLatitude());
-        $this->assertSame('-2000.4', $location->getLongitude());
-    }
-
     /**
      * @test
      * @dataProvider provideArgs