Ajout endpoint création de projet

This commit is contained in:
wpetit 2020-02-19 15:55:33 +01:00
parent 3510e66882
commit dacf0a8aec
2 changed files with 84 additions and 16 deletions

View File

@ -2,15 +2,20 @@
namespace App\Controller; namespace App\Controller;
use App\Entity\Project; use App\Entity\Project;
use App\Entity\User;
use App\Http\DataResponse; use App\Http\DataResponse;
use App\Http\ErrorResponse;
use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Component\HttpFoundation\Request;
class ProjectController extends Controller class ProjectController extends Controller
{ {
/** /**
* @Route("/api/v1/projects", name="api_v1_list_projects") * @Route("/api/v1/projects", name="api_v1_list_projects", methods={"GET"})
* @IsGranted("ROLE_DEVELOPER")
*/ */
public function listProjects() public function listProjects()
{ {
@ -22,21 +27,7 @@ class ProjectController extends Controller
$results = []; $results = [];
foreach($projects as $p) { foreach($projects as $p) {
$project = [ $results[] = $p->toArray();
'id' => $p->getId(),
'name' => $p->getName(),
];
$project['users'] = $p->getUsers()->map(function($user) {
return ['id' => $user->getId(), 'username' => $user->getUsername()];
})->toArray();
$project['requests'] = $p->getRequests()->map(function($req) {
return ['id' => $req->getId()];
})->toArray();
$results[] = $project;
} }
return new DataResponse([ return new DataResponse([
@ -44,4 +35,64 @@ class ProjectController extends Controller
]); ]);
} }
/**
* @Route("/api/v1/projects/{projectId}", name="api_v1_show_project", methods={"GET"})
* @IsGranted("ROLE_USER")
*/
function showProject($projectId) {
/** @var Project|null */
$project = $this->getDoctrine()
->getRepository(Project::class)
->find($projectId)
;
if ($project == null) {
throw $this->createNotFoundException('Project does not exist.');
}
return new DataResponse([
'project' => $project->toArray(),
]);
}
/**
* @Route("/api/v1/projects", name="api_v1_create_project", methods={"POST"})
* @IsGranted("ROLE_DEVELOPER")
*/
public function createProject(Request $request)
{
$content = $request->getContent();
$projectData = json_decode($content, true);
$newProject = new Project();
if (!isset($projectData['name'])) {
return new ErrorResponse(0, "You must provide a project name");
}
$newProject->setName($projectData['name']);
if(isset($projectData['users']) && is_array($projectData['users'])) {
$userRepository = $this->getDoctrine()->getRepository(User::class);
foreach($projectData['users'] as $userId) {
/** @var User */
$user = $userRepository->find($userId);
if ($user == null) {
return new ErrorResponse(1, "Invalid user id");
}
$newProject->addUser($user);
}
}
$manager = $this->getDoctrine()->getManager();
$manager->persist($newProject);
$manager->flush();
return new DataResponse([
'project' => $newProject->toArray(),
]);
}
} }

View File

@ -112,4 +112,21 @@ class Project
return $this; return $this;
} }
public function toArray(): array {
$project = [
'id' => $this->getId(),
'name' => $this->getName(),
];
$project['users'] = $this->getUsers()->map(function($user) {
return ['id' => $user->getId(), 'username' => $user->getUsername()];
})->toArray();
$project['requests'] = $this->getRequests()->map(function($req) {
return ['id' => $req->getId(), 'title' => $req->getTitle() ];
})->toArray();
return $project;
}
} }