Skip to content

Commit

Permalink
refac(Service): rename Project classes
Browse files Browse the repository at this point in the history
  • Loading branch information
n3wborn committed Sep 12, 2023
1 parent 418b257 commit 887113a
Show file tree
Hide file tree
Showing 9 changed files with 33 additions and 32 deletions.
9 changes: 5 additions & 4 deletions src/Controller/ProjectController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
namespace App\Controller;

use App\Entity\Project;
use App\Service\Project\DTO;
use App\Service\Project\Handler;
use App\Service\Category\CategoryFinder;
use App\Service\Project\ProjectDTO;
use App\Service\Project\ProjectHandler;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
Expand All @@ -14,7 +15,7 @@
final class ProjectController extends AbstractController
{
public function __construct(
private Handler $handler,
private ProjectHandler $handler,
) {
}

Expand All @@ -34,7 +35,7 @@ public function getProject(?Project $project): JsonResponse
#[Route('/project/{slug}', name: self::ROUTE_EDIT, methods: Request::METHOD_POST)]
public function persistProject(
?Project $project,
#[MapRequestPayload()] ?DTO $dto,
#[MapRequestPayload()] ?ProjectDTO $dto,
Request $request,
): JsonResponse {
return $this->handler->handlePersistProject($project, $request, $dto);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;

final class Archiver
final class ProjectArchiver
{
public function __construct(
private EntityManagerInterface $entityManager,
private Validator $validator,
private Mapper $mapper,
private ProjectValidator $validator,
private ProjectMapper $mapper,
private ExceptionLogger $logger,
) {
}
Expand All @@ -34,7 +34,7 @@ public function process(?Project $project): JsonResponse
$this->softDelete($project);

$response = ApiResponse::createAndFormat(
Mapper::fromEntityToJson($project),
ProjectMapper::fromEntityToJson($project),
ApiMessages::PROJECT_DELETE_SUCCESS_MESSAGE);
} catch (NotFoundException|BadDataException $exception) {
$this->logger->logNotice($exception);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace App\Service\Project;

final class DTO
final class ProjectDTO
{
public function __construct(
private string $name = '',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use App\Helper\ApiMessages;
use App\Repository\ProjectRepository;

final class Finder
final class ProjectFinder
{
public function __construct(
private ProjectRepository $projectRepository,
Expand All @@ -34,6 +34,6 @@ public function getAll(): array

public function getAllNotArchived(): array
{
return $this->projectRepository->findBy(['archivedAt' => null]);
return $this->projectRepository->findAllNotArchived();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;

final class Handler
final class ProjectHandler
{
public function __construct(
private Finder $finder,
private ProjectFinder $finder,
private ExceptionLogger $logger,
private Archiver $archiver,
private Persister $persister,
private ProjectArchiver $archiver,
private ProjectPersister $persister,
) {
}

Expand All @@ -27,7 +27,7 @@ public function handleGetProject(?Project $project): JsonResponse
&& throw new NotFoundException(ApiMessages::translate(ApiMessages::PROJECT_NOT_FOUND));

$result = $this->finder->get($project);
$response = new ApiResponse(Mapper::fromEntityToJson($result));
$response = new ApiResponse(ProjectMapper::fromEntityToJson($result));
} catch (NotFoundException $exception) {
$this->logger->logNotice($exception);
$response = ApiResponse::createWarningMessage($exception->getMessage());
Expand All @@ -42,12 +42,12 @@ public function handleGetProject(?Project $project): JsonResponse
public function handleGetAllProjects(): JsonResponse
{
$projects = $this->finder->getAllNotArchived();
$result = array_map(static fn (Project $project) => Mapper::fromEntityToJson($project), $projects);
$result = array_map(static fn (Project $project) => ProjectMapper::fromEntityToJson($project), $projects);

return new ApiResponse($result);
}

public function handlePersistProject(?Project $project, Request $request, DTO $dto): JsonResponse
public function handlePersistProject(?Project $project, Request $request, ProjectDTO $dto): JsonResponse
{
return $this->persister->processRequest($project ?? new Project(), $dto, $request);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;

final class Helper
final class ProjectHelper
{
public function __construct(
private EntityManagerInterface $em,
Expand Down Expand Up @@ -44,6 +44,6 @@ public function validateRequestResource(Request $request, Project $project): voi
&& throw new NotFoundException(ApiMessages::translate(ApiMessages::PROJECT_UNKNOWN));

$project->isArchived()
&& throw new BadDataException(Validator::PROJECT_ALREADY_ARCHIVED);
&& throw new BadDataException(ProjectValidator::PROJECT_ALREADY_ARCHIVED);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;

final class Mapper
final class ProjectMapper
{
/** @throws ExceptionInterface */
public static function fromEntityToJson(Project $project): mixed
Expand All @@ -18,9 +18,9 @@ public static function fromEntityToJson(Project $project): mixed
return $serializer->normalize($dto, JsonEncoder::FORMAT);
}

public static function fromEntityToDTO(Project $project): DTO
public static function fromEntityToDTO(Project $project): ProjectDTO
{
return new DTO(
return new ProjectDTO(
$project->getName(),
$project->getDescription(),
$project->getSlug(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,27 @@
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Serializer\SerializerInterface;

final class Persister
final class ProjectPersister
{
public function __construct(
private Validator $validator,
private ProjectValidator $validator,
private EntityManagerInterface $em,
private Helper $helper,
private ProjectHelper $helper,
private ExceptionLogger $logger,
private SerializerInterface $serializer,
) {
}

public function processRequest(Project $project, DTO $dto, Request $request): JsonResponse
public function processRequest(Project $project, ProjectDTO $dto, Request $request): JsonResponse
{
try {
$this->helper->validateRequestResource($request, $project);
$this->validator->validate($dto);
$this->persist($project, $dto);

$response = ApiResponse::createAndFormat(
Mapper::fromEntityToJson($project),
Helper::generateEditSuccessMessage($request)
ProjectMapper::fromEntityToJson($project),
ProjectHelper::generateEditSuccessMessage($request)
);
} catch (NotFoundException|BadDataException $exception) {
$this->logger->logNotice($exception);
Expand All @@ -47,7 +47,7 @@ public function processRequest(Project $project, DTO $dto, Request $request): Js
}

/** @throws NotFoundException */
public function persist(?Project $project, DTO $dto): void
public function persist(?Project $project, ProjectDTO $dto): void
{
$project
->setName($dto->getName())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@
use App\Exception\NotFoundException;
use App\Helper\ApiMessages;

final class Validator
final class ProjectValidator
{
public const PROJECT_ALREADY_ARCHIVED = 'Le projet est déjà archivé';
public const NAME_SHOULD_NOT_BE_EMPTY = 'Le champ Nom ne peut être vide';
public const DESCRIPTION_SHOULD_NOT_BE_EMPTY = 'Le champ Description ne peut être vide';

/** @throws BadDataException*/
public function validate(DTO $dto): void
public function validate(ProjectDTO $dto): void
{
$this
->validateNameNotEmpty($dto->getName())
Expand Down

0 comments on commit 887113a

Please sign in to comment.