Replace BaseEntity with BaseDataTransferObject class for API representation classes
authorHypolite Petovan <hypolite@mrpetovan.com>
Sun, 17 Jan 2021 21:04:00 +0000 (16:04 -0500)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sat, 23 Jan 2021 10:42:58 +0000 (05:42 -0500)
19 files changed:
src/BaseDataTransferObject.php [new file with mode: 0644]
src/BaseEntity.php [deleted file]
src/BaseModel.php
src/Object/Api/Friendica/Notification.php
src/Object/Api/Mastodon/Account.php
src/Object/Api/Mastodon/Activity.php
src/Object/Api/Mastodon/Application.php
src/Object/Api/Mastodon/Attachment.php
src/Object/Api/Mastodon/Card.php
src/Object/Api/Mastodon/Emoji.php
src/Object/Api/Mastodon/Error.php
src/Object/Api/Mastodon/Field.php
src/Object/Api/Mastodon/Instance.php
src/Object/Api/Mastodon/Mention.php
src/Object/Api/Mastodon/Relationship.php
src/Object/Api/Mastodon/Stats.php
src/Object/Api/Mastodon/Status.php
src/Object/Api/Mastodon/Tag.php
src/Object/Api/Twitter/User.php

diff --git a/src/BaseDataTransferObject.php b/src/BaseDataTransferObject.php
new file mode 100644 (file)
index 0000000..5736cdf
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+/**
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica;
+
+/**
+ * These data transfer object classes are meant for API representations. As such, their members should be protected.
+ * Then the JsonSerializable interface ensures the protected members will be included in a JSON encode situation.
+ *
+ * Constructors are supposed to take as arguments the Friendica dependencies/model/collection/data it needs to
+ * populate the class members.
+ */
+abstract class BaseDataTransferObject implements \JsonSerializable
+{
+       /**
+        * Returns the current entity as an json array
+        *
+        * @return array
+        */
+       public function jsonSerialize(): array
+       {
+               return $this->toArray();
+       }
+
+       /**
+        * Returns the current entity as an array
+        *
+        * @return array
+        */
+       public function toArray(): array
+       {
+               return get_object_vars($this);
+       }
+}
diff --git a/src/BaseEntity.php b/src/BaseEntity.php
deleted file mode 100644 (file)
index 1ea3f8a..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * @copyright Copyright (C) 2020, Friendica
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <https://www.gnu.org/licenses/>.
- *
- */
-
-namespace Friendica;
-
-/**
- * The API entity classes are meant as data transfer objects. As such, their member should be protected.
- * Then the JsonSerializable interface ensures the protected members will be included in a JSON encode situation.
- *
- * Constructors are supposed to take as arguments the Friendica dependencies/model/collection/data it needs to
- * populate the class members.
- */
-abstract class BaseEntity implements \JsonSerializable
-{
-       /**
-        * Returns the current entity as an json array
-        *
-        * @return array
-        */
-       public function jsonSerialize()
-       {
-               return $this->toArray();
-       }
-
-       /**
-        * Returns the current entity as an array
-        *
-        * @return array
-        */
-       public function toArray()
-       {
-               return get_object_vars($this);
-       }
-}
index 41320d8..a2750d5 100644 (file)
@@ -31,7 +31,7 @@ use Psr\Log\LoggerInterface;
  *
  * @property int id
  */
-abstract class BaseModel extends BaseEntity
+abstract class BaseModel extends BaseDataTransferObject
 {
        /** @var Database */
        protected $dba;
@@ -67,7 +67,7 @@ abstract class BaseModel extends BaseEntity
                $this->originalData = $data;
        }
 
-       public function getOriginalData()
+       public function getOriginalData(): array
        {
                return $this->originalData;
        }
@@ -84,7 +84,7 @@ abstract class BaseModel extends BaseEntity
         * @param array     $data
         * @return BaseModel
         */
-       public static function createFromPrototype(BaseModel $prototype, array $data)
+       public static function createFromPrototype(BaseModel $prototype, array $data): BaseModel
        {
                $model = clone $prototype;
                $model->data = $data;
@@ -100,7 +100,7 @@ abstract class BaseModel extends BaseEntity
         * @param $name
         * @return bool
         */
-       public function __isset($name)
+       public function __isset($name): bool
        {
                return in_array($name, array_merge(array_keys($this->data), array_keys(get_object_vars($this))));
        }
@@ -126,15 +126,19 @@ abstract class BaseModel extends BaseEntity
        }
 
        /**
+        * * Magic setter. This allows to set model fields with the following syntax:
+        * - $model->field = $value (outside of class)
+        * - $this->field = $value (inside of class)
+        *
         * @param string $name
-        * @param mixed $value
+        * @param mixed  $value
         */
-       public function __set($name, $value)
+       public function __set(string $name, $value)
        {
                $this->data[$name] = $value;
        }
 
-       public function toArray()
+       public function toArray(): array
        {
                return $this->data;
        }
index aee787d..60c824a 100644 (file)
@@ -21,7 +21,7 @@
 
 namespace Friendica\Object\Api\Friendica;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 use Friendica\Content\Text\BBCode;
 use Friendica\Content\Text\HTML;
 use Friendica\Model\Notify;
@@ -33,7 +33,7 @@ use Friendica\Util\Temporal;
  *
  * @see https://github.com/friendica/friendica/blob/develop/doc/API-Entities.md#notification
  */
-class Notification extends BaseEntity
+class Notification extends BaseDataTransferObject
 {
        /** @var integer */
        protected $id;
index 587c6ce..e743395 100644 (file)
@@ -22,7 +22,7 @@
 namespace Friendica\Object\Api\Mastodon;
 
 use Friendica\App\BaseURL;
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 use Friendica\Collection\Api\Mastodon\Fields;
 use Friendica\Content\Text\BBCode;
 use Friendica\Database\DBA;
@@ -34,7 +34,7 @@ use Friendica\Util\DateTimeFormat;
  *
  * @see https://docs.joinmastodon.org/entities/account
  */
-class Account extends BaseEntity
+class Account extends BaseDataTransferObject
 {
        /** @var string */
        protected $id;
@@ -138,7 +138,7 @@ class Account extends BaseEntity
         *
         * @return array
         */
-       public function toArray()
+       public function toArray(): array
        {
                $account = parent::toArray();
 
index a73307e..73bde98 100644 (file)
 
 namespace Friendica\Object\Api\Mastodon;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 
 /**
  * Class Activity
  *
  * @see https://docs.joinmastodon.org/entities/activity
  */
-class Activity extends BaseEntity
+class Activity extends BaseDataTransferObject
 {
        /** @var string (UNIX Timestamp) */
        protected $week;
index d26d270..8cac4aa 100644 (file)
 
 namespace Friendica\Object\Api\Mastodon;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 
 /**
  * Class Application
  *
  * @see https://docs.joinmastodon.org/entities/application
  */
-class Application extends BaseEntity
+class Application extends BaseDataTransferObject
 {
        /** @var string */
        protected $name;
index 1651e9c..cc55b37 100644 (file)
 
 namespace Friendica\Object\Api\Mastodon;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 
 /**
  * Class Attachment
  *
  * @see https://docs.joinmastodon.org/entities/attachment
  */
-class Attachment extends BaseEntity
+class Attachment extends BaseDataTransferObject
 {
        /** @var string */
        protected $id;
@@ -67,7 +67,7 @@ class Attachment extends BaseEntity
         *
         * @return array
         */
-       public function toArray()
+       public function toArray(): array
        {
                $attachment = parent::toArray();
 
index 2f46e47..33e3c10 100644 (file)
 
 namespace Friendica\Object\Api\Mastodon;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 
 /**
  * Class Card
  *
  * @see https://docs.joinmastodon.org/entities/card
  */
-class Card extends BaseEntity
+class Card extends BaseDataTransferObject
 {
        /** @var string */
        protected $url;
@@ -67,10 +67,10 @@ class Card extends BaseEntity
         *
         * @return array
         */
-       public function toArray()
+       public function toArray(): array
        {
                if (empty($this->url)) {
-                       return null;
+                       return [];
                }
 
                return parent::toArray();
index 1f6f121..837b186 100644 (file)
 
 namespace Friendica\Object\Api\Mastodon;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 
 /**
  * Class Emoji
  *
  * @see https://docs.joinmastodon.org/entities/emoji/
  */
-class Emoji extends BaseEntity
+class Emoji extends BaseDataTransferObject
 {
        //Required attributes
        /** @var string */
index 0bfd182..4457398 100644 (file)
 
 namespace Friendica\Object\Api\Mastodon;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 
 /**
  * Class Error
  *
  * @see https://docs.joinmastodon.org/entities/error
  */
-class Error extends BaseEntity
+class Error extends BaseDataTransferObject
 {
        /** @var string */
        protected $error;
@@ -53,7 +53,7 @@ class Error extends BaseEntity
         *
         * @return array
         */
-       public function toArray()
+       public function toArray(): array
        {
                $error = parent::toArray();
 
index 95cbc89..91e8fb1 100644 (file)
 
 namespace Friendica\Object\Api\Mastodon;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 
 /**
  * Class Field
  *
  * @see https://docs.joinmastodon.org/entities/field/
  */
-class Field extends BaseEntity
+class Field extends BaseDataTransferObject
 {
        /** @var string */
        protected $name;
index 6105a8b..d086375 100644 (file)
@@ -21,7 +21,7 @@
 
 namespace Friendica\Object\Api\Mastodon;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\User;
@@ -32,7 +32,7 @@ use Friendica\Module\Register;
  *
  * @see https://docs.joinmastodon.org/api/entities/#instance
  */
-class Instance extends BaseEntity
+class Instance extends BaseDataTransferObject
 {
        /** @var string (URL) */
        protected $uri;
index 22e623e..6de6f00 100644 (file)
 namespace Friendica\Object\Api\Mastodon;
 
 use Friendica\App\BaseURL;
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 
 /**
  * Class Mention
  *
  * @see https://docs.joinmastodon.org/entities/mention
  */
-class Mention extends BaseEntity
+class Mention extends BaseDataTransferObject
 {
        /** @var string */
        protected $id;
index bb3aa55..06f9737 100644 (file)
@@ -21,7 +21,7 @@
 
 namespace Friendica\Object\Api\Mastodon;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 use Friendica\Model\Contact;
 use Friendica\Util\Network;
 
@@ -30,7 +30,7 @@ use Friendica\Util\Network;
  *
  * @see https://docs.joinmastodon.org/api/entities/#relationship
  */
-class Relationship extends BaseEntity
+class Relationship extends BaseDataTransferObject
 {
        /** @var int */
        protected $id;
index 6ead526..398b725 100644 (file)
@@ -21,7 +21,7 @@
 
 namespace Friendica\Object\Api\Mastodon;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 use Friendica\Core\Protocol;
 use Friendica\Database\DBA;
 use Friendica\DI;
@@ -31,7 +31,7 @@ use Friendica\DI;
  *
  * @see https://docs.joinmastodon.org/api/entities/#stats
  */
-class Stats extends BaseEntity
+class Stats extends BaseDataTransferObject
 {
        /** @var int */
        protected $user_count = 0;
index d14eb4e..c4b7e39 100644 (file)
@@ -21,7 +21,7 @@
 
 namespace Friendica\Object\Api\Mastodon;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 use Friendica\Content\Text\BBCode;
 use Friendica\Object\Api\Mastodon\Status\Counts;
 use Friendica\Object\Api\Mastodon\Status\UserAttributes;
@@ -32,7 +32,7 @@ use Friendica\Util\DateTimeFormat;
  *
  * @see https://docs.joinmastodon.org/entities/status
  */
-class Status extends BaseEntity
+class Status extends BaseDataTransferObject
 {
        /** @var string */
        protected $id;
@@ -143,7 +143,7 @@ class Status extends BaseEntity
         *
         * @return array
         */
-       public function toArray()
+       public function toArray(): array
        {
                $status = parent::toArray();
 
index 1e74eae..c83c3bc 100644 (file)
 namespace Friendica\Object\Api\Mastodon;
 
 use Friendica\App\BaseURL;
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 
 /**
  * Class Tag
  *
  * @see https://docs.joinmastodon.org/entities/tag
  */
-class Tag extends BaseEntity
+class Tag extends BaseDataTransferObject
 {
        /** @var string */
        protected $name;
index 1cdd699..7793fbc 100644 (file)
 
 namespace Friendica\Object\Api\Twitter;
 
-use Friendica\BaseEntity;
+use Friendica\BaseDataTransferObject;
 use Friendica\Content\ContactSelector;
 use Friendica\Content\Text\BBCode;
 
 /**
  * @see https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/user-object
  */
-class User extends BaseEntity
+class User extends BaseDataTransferObject
 {
        /** @var int */
        protected $id;