grifix

Code review test

May 23rd, 2025 (edited)
453
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.53 KB | None | 0 0
  1. <?php
  2.  
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use App\Entity\User;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Contracts\HttpClient\HttpClientInterface;
  10.  
  11. class UserController extends AbstractController
  12. {
  13.     private $entityManager;
  14.     private $mailer;
  15.  
  16.     public function __construct(
  17.         EntityManagerInterface $entityManager,
  18.         \Swift_Mailer $mailer,
  19.         HttpClientInterface $httpClient
  20.     )
  21.     {
  22.         $this->entityManager = $entityManager;
  23.         $this->mailer = $mailer;
  24.         $this->httpClient = $httpClient;
  25.     }
  26.  
  27.     /**
  28.      * @Route("/user/create", name="create_user", methods={"POST"})
  29.      */
  30.     public function createUser(Request $request): Response
  31.     {
  32.         $username = $request->request->get('username');
  33.         $email = $request->request->get('email');
  34.         $age = $request->request->get('age');
  35.  
  36.         //get daily limit from CRM
  37.         $response = $this->httpClient->request(
  38.             'GET',
  39.             'https://crm-api.com/api/get_limits',
  40.         );
  41.         $userDailyLimit = $response->toArray()['user_daily_limit'];
  42.  
  43.         //check if daily limit is not reached
  44.         if($this->entityManager->getRepository(User::class)->count(['createdAt' => new \DateTime('today')]) >= $userDailyLimit) {
  45.             return new Response('Daily limit reached', 500);
  46.         }
  47.  
  48.         //check age
  49.         if($age < 18) {
  50.             return new Response('User must be at least 18 years old', 404);
  51.         }
  52.  
  53.         //create a user
  54.         $user = new User();
  55.         $user->setUsername($username);
  56.         $user->setEmail($email);
  57.         $user->setAge($age);
  58.  
  59.         //save user to DB
  60.         $this->entityManager->persist($user);
  61.         $this->entityManager->flush();
  62.  
  63.         //send message to user
  64.         $message = (new \Swift_Message('Welcome'))
  65.             ->setFrom('[email protected]')
  66.             ->setTo($user->getEmail())
  67.             ->setBody("Welcome to the site, {$user->getUsername()}");
  68.  
  69.         $this->mailer->send($message);
  70.  
  71.         //create a client for the user in CRM
  72.         $this->httpClient->request(
  73.             'POST',
  74.             'https://crm-api.com/api/clients',
  75.             [
  76.                 'json' => [
  77.                     'name' => $username,
  78.                     'email' => $email,
  79.                 ],
  80.             ]
  81.         );
  82.  
  83.         return new Response('User created');
  84.     }
  85. }
  86.  
Advertisement
Add Comment
Please, Sign In to add comment