66use App \Models \News ;
77use App \Models \Page ;
88use App \Models \Product ;
9- use App \Models \Reference ;
109use App \Models \Service ;
10+ use Illuminate \Support \Carbon ;
1111use Illuminate \Support \Collection ;
1212use Illuminate \Support \Str ;
1313
1414class PageAction
1515{
16+ /**
17+ * @param Collection<int, PageDTO>|null $referencePages
18+ */
1619 public function __construct (
1720 private ?string $ locale = null ,
1821 private ?string $ routeName = null ,
@@ -37,7 +40,7 @@ public function default(): ?PageDTO
3740 title: $ page ->title ,
3841 description: $ page ->description ,
3942 image: $ page ->image ,
40- lastModificationDate: $ page ->updated_at ?? now (),
43+ lastModificationDate: Carbon:: parse ( $ page ->updated_at ?? now () ),
4144 routeParameters: $ this ->routeParameters ,
4245 referencePages: $ this ->referencePages
4346 );
@@ -52,13 +55,9 @@ public function news(News $news, bool $withReferences = false, ?string $locale =
5255 title: $ news ->title ,
5356 description: $ news ->teaser ,
5457 image: $ news ->image ,
55- lastModificationDate: $ news ->updated_at ?? now (),
58+ lastModificationDate: Carbon:: parse ( $ news ->updated_at ?? now () ),
5659 routeParameters: ['locale ' => $ news ->locale , 'news ' => $ news ],
57- referencePages: $ withReferences ? $ news ->references ->map (function (Reference $ reference ) {
58- $ reference ->load (['target ' ]);
59-
60- return self ::news (news: $ reference ->target , withReferences: false , locale: $ reference ->reference_locale );
61- }) : null ,
60+ referencePages: $ withReferences ? $ this ->newsReferencePages ($ news ) : null ,
6261 );
6362 }
6463
@@ -71,13 +70,9 @@ public function product(Product $product, bool $withReferences = false, ?string
7170 title: $ product ->name ,
7271 description: $ product ->teaser ,
7372 image: $ product ->image ,
74- lastModificationDate: $ product ->updated_at ?? now (),
73+ lastModificationDate: Carbon:: parse ( $ product ->updated_at ?? now () ),
7574 routeParameters: ['locale ' => $ product ->locale , 'product ' => $ product ],
76- referencePages: $ withReferences ? $ product ->references ->map (function (Reference $ reference ) {
77- $ reference ->load (['target ' ]);
78-
79- return self ::product (product: $ reference ->target , withReferences: false , locale: $ reference ->reference_locale );
80- }) : null ,
75+ referencePages: $ withReferences ? $ this ->productReferencePages ($ product ) : null ,
8176 );
8277 }
8378
@@ -90,16 +85,72 @@ public function service(Service $service, bool $withReferences = false, ?string
9085 title: $ service ->name ,
9186 description: $ service ->teaser ,
9287 image: $ service ->image ,
93- lastModificationDate: $ service ->updated_at ?? now (),
88+ lastModificationDate: Carbon:: parse ( $ service ->updated_at ?? now () ),
9489 routeParameters: ['locale ' => $ service ->locale , 'service ' => $ service ],
95- referencePages: $ withReferences ? $ service ->references ->map (function (Reference $ reference ) {
96- $ reference ->load (['target ' ]);
97-
98- return self ::service (service: $ reference ->target , withReferences: false , locale: $ reference ->reference_locale );
99- }) : null ,
90+ referencePages: $ withReferences ? $ this ->serviceReferencePages ($ service ) : null ,
10091 );
10192 }
10293
94+ /**
95+ * @return Collection<int, PageDTO>
96+ */
97+ private function newsReferencePages (News $ news ): Collection
98+ {
99+ $ pages = [];
100+
101+ foreach ($ news ->references as $ reference ) {
102+ $ reference ->load (['target ' ]);
103+
104+ if (! $ reference ->target instanceof News) {
105+ continue ;
106+ }
107+
108+ $ pages [] = $ this ->news (news: $ reference ->target , withReferences: false , locale: $ reference ->reference_locale );
109+ }
110+
111+ return collect ($ pages );
112+ }
113+
114+ /**
115+ * @return Collection<int, PageDTO>
116+ */
117+ private function productReferencePages (Product $ product ): Collection
118+ {
119+ $ pages = [];
120+
121+ foreach ($ product ->references as $ reference ) {
122+ $ reference ->load (['target ' ]);
123+
124+ if (! $ reference ->target instanceof Product) {
125+ continue ;
126+ }
127+
128+ $ pages [] = $ this ->product (product: $ reference ->target , withReferences: false , locale: $ reference ->reference_locale );
129+ }
130+
131+ return collect ($ pages );
132+ }
133+
134+ /**
135+ * @return Collection<int, PageDTO>
136+ */
137+ private function serviceReferencePages (Service $ service ): Collection
138+ {
139+ $ pages = [];
140+
141+ foreach ($ service ->references as $ reference ) {
142+ $ reference ->load (['target ' ]);
143+
144+ if (! $ reference ->target instanceof Service) {
145+ continue ;
146+ }
147+
148+ $ pages [] = $ this ->service (service: $ reference ->target , withReferences: false , locale: $ reference ->reference_locale );
149+ }
150+
151+ return collect ($ pages );
152+ }
153+
103154 private function findPage (): ?Page
104155 {
105156 return Page::where ('locale ' , $ this ->locale )
0 commit comments