Skip to content

Commit bef69a5

Browse files
committed
refactor timestampables of entities into traid
- move properties created_time, last_updated_time, etc. to its own trait - remove attributes and methods from entity classes (which are applied by traid) - apply traid to according entity classes (database, page and block) - add created_by, last_updated_by to this new trait
1 parent 685e73a commit bef69a5

File tree

5 files changed

+124
-94
lines changed

5 files changed

+124
-94
lines changed

src/Entities/Blocks/Block.php

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
use DateTime;
66
use FiveamCode\LaravelNotionApi\Entities\Entity;
77
use FiveamCode\LaravelNotionApi\Exceptions\HandlingException;
8+
use FiveamCode\LaravelNotionApi\Traits\TimestampableEntity;
89
use Illuminate\Support\Arr;
910

1011
/**
1112
* Class Block.
1213
*/
1314
class Block extends Entity
1415
{
16+
use TimestampableEntity;
17+
1518
/**
1619
* @var string
1720
*/
@@ -37,16 +40,6 @@ class Block extends Entity
3740
*/
3841
protected string $text = '[warning: unsupported in notion api]';
3942

40-
/**
41-
* @var DateTime
42-
*/
43-
protected DateTime $createdTime;
44-
45-
/**
46-
* @var DateTime
47-
*/
48-
protected DateTime $lastEditedTime;
49-
5043
/**
5144
* @param array $responseData
5245
*
@@ -69,8 +62,7 @@ protected function fillFromRaw(): void
6962
$this->fillType();
7063
$this->fillRawContent();
7164
$this->fillHasChildren();
72-
$this->fillCreatedTime();
73-
$this->fillLastEditedTime();
65+
$this->fillTimestampableProperties();
7466
}
7567

7668
private function fillType(): void
@@ -126,22 +118,6 @@ public function hasChildren(): bool
126118
return $this->hasChildren;
127119
}
128120

129-
/**
130-
* @return DateTime
131-
*/
132-
public function getCreatedTime(): DateTime
133-
{
134-
return $this->createdTime;
135-
}
136-
137-
/**
138-
* @return DateTime
139-
*/
140-
public function getLastEditedTime(): DateTime
141-
{
142-
return $this->lastEditedTime;
143-
}
144-
145121
public function getContent()
146122
{
147123
return $this->content;

src/Entities/Database.php

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
namespace FiveamCode\LaravelNotionApi\Entities;
44

55
use DateTime;
6+
use FiveamCode\LaravelNotionApi\Entities\Properties\People;
67
use FiveamCode\LaravelNotionApi\Entities\Properties\Property;
78
use FiveamCode\LaravelNotionApi\Exceptions\HandlingException;
9+
use FiveamCode\LaravelNotionApi\Traits\TimestampableEntity;
810
use Illuminate\Support\Arr;
911
use Illuminate\Support\Collection;
1012

@@ -13,6 +15,8 @@
1315
*/
1416
class Database extends Entity
1517
{
18+
use TimestampableEntity;
19+
1620
/**
1721
* @var string
1822
*/
@@ -73,15 +77,7 @@ class Database extends Entity
7377
*/
7478
protected Collection $properties;
7579

76-
/**
77-
* @var DateTime
78-
*/
79-
protected DateTime $createdTime;
8080

81-
/**
82-
* @var DateTime
83-
*/
84-
protected DateTime $lastEditedTime;
8581

8682
protected function setResponseData(array $responseData): void
8783
{
@@ -101,8 +97,7 @@ private function fillFromRaw()
10197
$this->fillObjectType();
10298
$this->fillProperties();
10399
$this->fillDatabaseUrl();
104-
$this->fillCreatedTime();
105-
$this->fillLastEditedTime();
100+
$this->fillTimestampableProperties();
106101
}
107102

108103
private function fillTitle(): void
@@ -268,20 +263,4 @@ public function getPropertyKeys(): array
268263
{
269264
return $this->propertyKeys;
270265
}
271-
272-
/**
273-
* @return DateTime
274-
*/
275-
public function getCreatedTime(): DateTime
276-
{
277-
return $this->createdTime;
278-
}
279-
280-
/**
281-
* @return array
282-
*/
283-
public function getLastEditedTime(): DateTime
284-
{
285-
return $this->lastEditedTime;
286-
}
287266
}

src/Entities/Entity.php

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace FiveamCode\LaravelNotionApi\Entities;
44

55
use Carbon\Carbon;
6+
use DateTime;
67
use FiveamCode\LaravelNotionApi\Exceptions\HandlingException;
78
use FiveamCode\LaravelNotionApi\Exceptions\NotionException;
89
use Illuminate\Support\Arr;
@@ -68,19 +69,6 @@ protected function setResponseData(array $responseData): void
6869
$this->responseData = $responseData;
6970
}
7071

71-
protected function fillCreatedTime()
72-
{
73-
if (Arr::exists($this->responseData, 'created_time')) {
74-
$this->createdTime = new Carbon($this->responseData['created_time']);
75-
}
76-
}
77-
78-
protected function fillLastEditedTime()
79-
{
80-
if (Arr::exists($this->responseData, 'last_edited_time')) {
81-
$this->lastEditedTime = new Carbon($this->responseData['last_edited_time']);
82-
}
83-
}
8472

8573
protected function fillId()
8674
{

src/Entities/Page.php

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use FiveamCode\LaravelNotionApi\Entities\Properties\Title;
1818
use FiveamCode\LaravelNotionApi\Entities\Properties\Url;
1919
use FiveamCode\LaravelNotionApi\Exceptions\HandlingException;
20+
use FiveamCode\LaravelNotionApi\Traits\TimestampableEntity;
2021
use Illuminate\Support\Arr;
2122
use Illuminate\Support\Collection;
2223

@@ -25,6 +26,8 @@
2526
*/
2627
class Page extends Entity
2728
{
29+
use TimestampableEntity;
30+
2831
/**
2932
* @var string
3033
*/
@@ -80,16 +83,6 @@ class Page extends Entity
8083
*/
8184
protected Collection $properties;
8285

83-
/**
84-
* @var DateTime
85-
*/
86-
protected DateTime $createdTime;
87-
88-
/**
89-
* @var DateTime
90-
*/
91-
protected DateTime $lastEditedTime;
92-
9386
/**
9487
* Page constructor.
9588
*
@@ -128,8 +121,7 @@ private function fillFromRaw(): void
128121
$this->fillPageUrl();
129122
$this->fillIcon();
130123
$this->fillCover();
131-
$this->fillCreatedTime();
132-
$this->fillLastEditedTime();
124+
$this->fillTimestampableProperties();
133125
}
134126

135127
private function fillObjectType(): void
@@ -474,19 +466,4 @@ public function getPropertyKeys(): array
474466
return $this->propertyKeys;
475467
}
476468

477-
/**
478-
* @return DateTime
479-
*/
480-
public function getCreatedTime(): DateTime
481-
{
482-
return $this->createdTime;
483-
}
484-
485-
/**
486-
* @return DateTime
487-
*/
488-
public function getLastEditedTime(): DateTime
489-
{
490-
return $this->lastEditedTime;
491-
}
492469
}

src/Traits/TimestampableEntity.php

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?php
2+
3+
namespace FiveamCode\LaravelNotionApi\Traits;
4+
5+
use Carbon\Carbon;
6+
use DateTime;
7+
use FiveamCode\LaravelNotionApi\Entities\Entity;
8+
use FiveamCode\LaravelNotionApi\Entities\User;
9+
use Illuminate\Support\Arr;
10+
11+
/**
12+
* Trait UpdatableEntity
13+
* @package FiveamCode\LaravelNotionApi\Traits
14+
*/
15+
trait TimestampableEntity
16+
{
17+
18+
/**
19+
* @var array
20+
*/
21+
protected array $responseData = [];
22+
23+
/**
24+
* @var DateTime
25+
*/
26+
protected DateTime $createdTime;
27+
28+
/**
29+
* @var DateTime
30+
*/
31+
protected DateTime $lastEditedTime;
32+
33+
/**
34+
* @var User
35+
*/
36+
protected User $createdBy;
37+
38+
/**
39+
* @var User
40+
*/
41+
protected User $lastEditedBy;
42+
43+
protected function fillTimestampableProperties(): void
44+
{
45+
$this->fillCreatedTime();
46+
$this->fillLastEditedTime();
47+
$this->fillCreatedBy();
48+
$this->fillLastEditedBy();
49+
}
50+
51+
protected function fillCreatedTime(): void
52+
{
53+
if (Arr::exists($this->responseData, 'created_time')) {
54+
$this->createdTime = new Carbon($this->responseData['created_time']);
55+
}
56+
}
57+
58+
protected function fillLastEditedTime(): void
59+
{
60+
if (Arr::exists($this->responseData, 'last_edited_time')) {
61+
$this->lastEditedTime = new Carbon($this->responseData['last_edited_time']);
62+
}
63+
}
64+
65+
protected function fillCreatedBy(): void
66+
{
67+
if (Arr::exists($this->responseData, 'created_by')) {
68+
$this->createdBy = new User($this->responseData['created_by']);
69+
}
70+
}
71+
72+
protected function fillLastEditedBy(): void
73+
{
74+
if (Arr::exists($this->responseData, 'last_edited_by')) {
75+
$this->lastEditedBy = new User($this->responseData['last_edited_by']);
76+
}
77+
}
78+
79+
/**
80+
* @return DateTime
81+
*/
82+
public function getCreatedTime(): DateTime
83+
{
84+
return $this->createdTime;
85+
}
86+
87+
/**
88+
* @return DateTime
89+
*/
90+
public function getLastEditedTime(): DateTime
91+
{
92+
return $this->lastEditedTime;
93+
}
94+
95+
/**
96+
* @return User
97+
*/
98+
public function getCreatedBy(): User
99+
{
100+
return $this->createdBy;
101+
}
102+
103+
/**
104+
* @return User
105+
*/
106+
public function getLastEditedBy(): User
107+
{
108+
return $this->lastEditedBy;
109+
}
110+
}

0 commit comments

Comments
 (0)