LaLiga-BackEnd/src/Dto/TeamDto.php

137 lines
4.0 KiB
PHP

<?php
namespace DMD\LaLigaApi\Dto;
use DMD\LaLigaApi\Entity\Facility;
use DMD\LaLigaApi\Entity\Team;
use DMD\LaLigaApi\Exception\ValidationException;
class TeamDto
{
public int $id;
public string $name;
public string $dayOfWeekForHomeGame;
public bool $active;
public array $seasonDtoList;
public array $playerDtoList;
public array $validationErrors;
public UserDto $captainDto;
public \DateTimeImmutable $createdAt;
public function toArray(): array
{
$seasonList = [];
$playerList = [];
if (!empty($this->seasonDtoList))
{
foreach ($this->seasonDtoList as $seasonDto)
{
$seasonList = $seasonDto->toArray();
}
}
if (!empty($this->playerDtoList))
{
foreach ($this->playerDtoList as $playerDto)
{
$playerList = $playerDto->toArray();
}
}
return [
'name' => $this->name ?? '',
'dayOfWeekForHomeGame' => $this->dayOfWeekForHomeGame ?? '',
'playerList' => $playerList,
'seasonList' => $seasonList,
'captainId' => $this->captainDto?->id,
'createdAt' => $this->createdAt->format('Y-m-d')
];
}
public function fillFromArray(array $dataList): void
{
if (isset($dataList['id']))
{
$this->id = $dataList['id'];
}
if (!empty($dataList['name']))
{
$this->name = $dataList['name'];
}
if (!empty($dataList['dayOfWeekForHomeGame']))
{
$this->dayOfWeekForHomeGame = $dataList['dayOfWeekForHomeGame'];
}
if (isset($dataList['active']))
{
$this->active = $dataList['active'];
}
if (!empty($dataList['seasonList']))
{
foreach ($dataList['seasonList'] as $seasonItem)
{
$seasonDto = new SeasonDto();
$seasonDto->fillFromArray($seasonItem);
$this->seasonDtoList[] = $seasonDto;
}
}
if (!empty($dataList['playerList']))
{
foreach ($dataList['playerList'] as $playerItem)
{
$playerDto = new PlayerDto();
$playerDto->fillFromArray($playerItem);
$this->playerDtoList[] = $playerDto;
}
}
if (!empty($dataList['captain']))
{
$captainDto = new UserDto();
$captainDto->fillFromArray($dataList['captain']);
$this->captainDto = $captainDto;
}
if (!empty($dataList['createdAt']))
{
$this->createdAt = \DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $dataList['createdAt'], new \DateTimeZone('Europe/Madrid'));
}
}
public function fillFromObject(Team $teamEntity): void
{
if ($teamEntity->getId())
{
$this->id = $teamEntity->getId();
}
if ($teamEntity->getName())
{
$this->name = $teamEntity->getName();
}
if ($teamEntity->getDayOfWeekForHomeGame())
{
$this->dayOfWeekForHomeGame = $teamEntity->getDayOfWeekForHomeGame();
}
if ($teamEntity->getPlayers())
{
foreach ($teamEntity->getPlayers() as $playerEntity)
{
$playerDto = new PlayerDto();
$playerDto->fillFromObject($playerEntity);
$this->playerDtoList[] = $playerDto;
}
}
if ($teamEntity->getCreatedAt())
{
$this->createdAt = $teamEntity->getCreatedAt();
}
}
public function validate(): void
{
if (empty($this->name))
{
$this->validationErrors[] = 'El nombre del equipo no puede estar vacío.';
}
if (!empty($this->validationErrors))
{
throw new ValidationException($this->validationErrors);
}
}
}