buckets/src/Controller/RegisterController.php

53 lines
1.7 KiB
PHP

<?php
namespace App\Controller;
use App\Dto\RegisterRequest;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
final class RegisterController extends AbstractController
{
public function __construct(
private UserPasswordHasherInterface $passwordHasher,
private EntityManagerInterface $entityManager,
private ValidatorInterface $validator,
) {
}
#[Route('/api/register', name: 'api_register', methods: ['POST'])]
public function register(Request $request): JsonResponse
{
$content = $request->toArray();
$requestDto = new RegisterRequest($content['email'] ?? '', $content['password'] ?? '');
$violations = $this->validator->validate($requestDto);
if (\count($violations) > 0) {
$errors = [];
foreach ($violations as $violation) {
$errors[$violation->getPropertyPath()][] = $violation->getMessage();
}
return $this->json(['errors' => $errors], 422);
}
$user = new User();
$user->setEmail($requestDto->email);
$user->setPassword($this->passwordHasher->hashPassword($user, $requestDto->password));
$this->entityManager->persist($user);
$this->entityManager->flush();
return $this->json([
'id' => (string) $user->getId(),
'email' => $user->getEmail(),
], 201);
}
}