@@ -72,10 +72,48 @@ protected function setResponseData(array $responseData): void
7272 $ this ->responseData = $ responseData ;
7373 }
7474
75- protected function fillEntityBase (): void
75+ protected function fillEssentials (): void
7676 {
7777 $ this ->fillId ();
7878 $ this ->fillObjectType ();
79+ $ this ->fillTraitAttributes ();
80+ }
81+
82+ private function fillTraitAttributes (): void
83+ {
84+ $ traitMapping = [
85+ 'FiveamCode\LaravelNotionApi\Traits\HasTimestamps ' => function ($ entity ) {
86+ $ entity ->fillTimestampableAttributes ();
87+ },
88+ 'FiveamCode\LaravelNotionApi\Traits\HasParent ' => function ($ entity ) {
89+ $ entity ->fillParentAttributes ();
90+ },
91+ 'FiveamCode\LaravelNotionApi\Traits\HasArchive ' => function ($ entity ) {
92+ $ entity ->fillArchivedAttributes ();
93+ },
94+ ];
95+
96+ $ traits = $ this ->class_uses_deep ($ this );
97+ foreach ($ traits as $ trait ) {
98+ if (Arr::exists ($ traitMapping , $ trait )) {
99+ $ traitMapping [$ trait ]($ this );
100+ }
101+ }
102+ }
103+
104+ private function class_uses_deep ($ class , $ autoload = true )
105+ {
106+ $ traits = [];
107+
108+ do {
109+ $ traits = array_merge (class_uses ($ class , $ autoload ), $ traits );
110+ } while ($ class = get_parent_class ($ class ));
111+
112+ foreach ($ traits as $ trait => $ same ) {
113+ $ traits = array_merge (class_uses ($ trait , $ autoload ), $ traits );
114+ }
115+
116+ return array_unique ($ traits );
79117 }
80118
81119 private function fillId ()
0 commit comments