Newer
Older
<?php
namespace App\Mapper;
use App\Entity\File;
use App\Entity\News;
use App\Entity\NewsCategory;
use App\Entity\NewsType;
use App\Entity\Seo;
use App\Model\NewsDetailElement;
use App\Model\NewsFilterVariants;
use App\Model\NewsList;
use App\Model\NewsListingElement;
use App\Model\NewsCategory as NewsCategoryModel;
use App\Model\Pagination;
use App\Requests\CreateNewsRequest;
use App\Requests\EditNewsRequest;
use Ramsey\Collection\Collection;
use DateTimeImmutable;
use Symfony\Component\Uid\Uuid;
class NewsMapper
{
public static function mapToNewsList(
Collection $news,
Collection $newsCategory,
int $page,
int $limit,
int $count
): NewsList {
return new NewsList(
new Pagination($page, ceil($count / $limit), $limit),
new Collection(NewsListingElement::class, array_map(
function (News $newsOne) {
return self::mapToListingElement($newsOne);
),
new NewsFilterVariants(
new Collection(NewsCategoryModel::class, array_map(
function (NewsCategory $newsCategoryOne) {
return self::mapToNewsCategory($newsCategoryOne);
)
)
);
}
public static function mapToListingElement(News $newsOne): NewsListingElement
{
return new NewsListingElement(
$newsOne->getId(),
$newsOne->getPreviewText(),
$newsOne->getDetailText(),
FileMapper::mapToFile($newsOne->getFile()),
$newsOne->getCreateAt()?->format('d.m.Y'),
"/{$newsOne->getCode()}/code/"
);
}
public static function mapToDetailElement(News $newsOne): NewsDetailElement
{
return new NewsDetailElement(
$newsOne->getId(),
$newsOne->getPreviewText(),
$newsOne->getDetailText(),
$newsOne->getDetailText(),
FileMapper::mapToFile($newsOne->getFile()),
$newsOne->getCreateAt()?->format('d.m.Y'),
$newsOne->getSeo()?->getTitle(),
$newsOne->getSeo()?->getDescription(),
$newsOne->getSeo()?->getKeywords()
public static function mapToNewsCategory(
NewsCategory $newsCategory
): NewsCategoryModel {
return new NewsCategoryModel(
$newsCategory->getId(),
$newsCategory->getName(),
$newsCategory->getCode(),
);
}
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
public static function createNewsEntity(
CreateNewsRequest|EditNewsRequest $request,
NewsType $newsType,
Seo $seo,
File $file,
string $id = null
): News {
$news = (new News())
->setCode($request->getCode())
->setActive($request->isActive())
->setCreateAt(new DateTimeImmutable())
->setUpdateAt(new DateTimeImmutable())
->setSort($request->getSort())
->setPreviewImage($request->getPreviewImage())
->setDetailImage($request->getDetailImage())
->setPreviewText($request->getPreviewText())
->setDetailText($request->getDetailText())
->setType($newsType)
->setMainPageRender($request->isMainPageRender())
->setSeo($seo)
->setFile($file);
if ($id !== null) {
$news->setId(new Uuid($id));
}
return $news;
}
public static function updateNewsEntity(
CreateNewsRequest|EditNewsRequest $request,
NewsType $newsType,
Seo $seo,
File $file,
News $news
): News
{
$news->setCode($request->getCode());
$news->setActive($request->isActive());
$news->setCreateAt($news->getCreateAt());
$news->setUpdateAt(new DateTimeImmutable());
$news->setSort($request->getSort());
$news->setPreviewText($request->getPreviewText());
$news->setDetailText($request->getDetailText());
$news->setPreviewImage($request->getPreviewImage());
$news->setDetailImage($request->getDetailImage());
$news->setType($newsType);
$news->setMainPageRender($request->isMainPageRender());
$news->setSeo($seo);
$news->setFile($file);
return $news;
}