getUser(); return new DataResponse([ 'username' => $user->getUsername(), 'roles' => $user->getRoles(), 'projects' => $user->getProjects()->map(function($project) { return [ 'id' => $project->getId(), 'name' => $project->getName(), ]; })->toArray(), 'requests' => $user->getRequests()->map(function($request) { return [ 'id' => $request->getId(), 'title' => $request->getTitle(), ]; })->toArray(), ]); } /** * @Route("/api/v1/users", name="api_v1_list_users", methods={"GET"}) * @IsGranted("ROLE_DEVELOPER") */ public function listUsers() { /** @var array */ $users = $this->getDoctrine() ->getRepository(User::class) ->findAll() ; $results = []; foreach($users as $u) { $results[] = [ 'id' => $u->getId(), 'username' => $u->getUsername(), ]; } return new DataResponse([ 'users' => $results, ]); } /** * @Route("/api/v1/users/{userId}", name="api_v1_get_user", methods={"GET"}, requirements={"userId"="\d+"}) * @IsGranted("ROLE_DEVELOPER") */ public function showUser($userId) { /** @var User */ $user = $this->getDoctrine() ->getRepository(User::class) ->find($userId) ; return new DataResponse([ 'user' => [ 'id' => $user->getId(), 'username' => $user->getUsername(), ] ]); } /** * @Route("/api/v1/users", name="api_v1_create_user", methods={"POST"}) * @IsGranted("ROLE_DEVELOPER") */ public function createUser(Request $request, UserPasswordEncoderInterface $passwordEncoder) { $content = $request->getContent(); $projectData = json_decode($content, true); $newUser = new User(); if (!isset($projectData['username']) || empty($projectData['username'])) { return new ErrorResponse(0, "You must provide a username"); } $newUser->setUsername($projectData['username']); if (!isset($projectData['password']) || empty($projectData['password'])) { return new ErrorResponse(1, "You must provide a password"); } if (mb_strlen($projectData['password']) < 8) { return new ErrorResponse(2, "Your password should have at least 8 characters"); } $newUser->setPassword($passwordEncoder->encodePassword( $newUser, $projectData['password'] )); $manager = $this->getDoctrine()->getManager(); $manager->persist($newUser); $manager->flush(); return new DataResponse([ 'user' => $newUser->toArray(), ]); } }