<?php
declare(strict_types=1);
namespace App\Controller\Api;
use App\Repository\ClientRepository;
use App\Service\TokenService;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class LoginController
{
private ClientRepository $clientRepository;
private TokenService $tokenService;
public function __construct(
ClientRepository $clientRepository,
TokenService $tokenService
) {
$this->clientRepository = $clientRepository;
$this->tokenService = $tokenService;
}
public function postLoginAction(Request $request): JsonResponse
{
$login = $request->get('login');
$password = $request->get('password');
if (!$login || !$password) {
return new JsonResponse('Invalid params', Response::HTTP_CONFLICT);
}
$client = $this->clientRepository->findOneByLogin($login);
if (!$client) {
return new JsonResponse('Invalid credentials', Response::HTTP_FORBIDDEN);
}
if ($client->getPassword() !== $password) {
return new JsonResponse('Invalid credentials', Response::HTTP_FORBIDDEN);
}
return new JsonResponse(
[
'userToken' => $this->tokenService->generateToken($client),
'userData' => [
'clientId' => $client->getUserNumber(),
'salutation' => $client->getSalutation(),
'firstName' => $client->getFirstName(),
'lastName' => $client->getLastName(),
'companyName' => $client->getCompanyName(),
'stateOrProvince' => $client->getStateOrProvince(),
'address' => $client->getAddress(),
'city' => $client->getCity(),
'country' => $client->getCountry(),
'callPhone' => $client->getCallNumber(),
'phoneNumber' => $client->getPhoneNumber(),
'fax' => $client->getFax(),
'email' => $client->getEmail()
]
]
);
}
}