/
PetController.php
113 lines (91 loc) · 3.05 KB
/
PetController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
namespace App\Controller;
use App\Repository\PetRepository;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
/**
* Class PetController
* @package App\Controller
*
* @Route(path="/api/")
*/
class PetController
{
private $petRepository;
public function __construct(PetRepository $petRepository)
{
$this->petRepository = $petRepository;
}
/**
* @Route("pet", name="add_pet", methods={"POST"})
*/
public function add(Request $request): JsonResponse
{
$data = json_decode($request->getContent(), true);
$name = $data['name'];
$type = $data['type'];
$photoUrls = $data['photoUrls'];
if (empty($name) || empty($type)) {
throw new NotFoundHttpException('Expecting mandatory parameters!');
}
$this->petRepository->savePet($name, $type, $photoUrls);
return new JsonResponse(['status' => 'Pet created!'], Response::HTTP_CREATED);
}
/**
* @Route("pet/{id}", name="get_one_pet", methods={"GET"})
*/
public function get($id): JsonResponse
{
$pet = $this->petRepository->findOneBy(['id' => $id]);
$data = [
'id' => $pet->getId(),
'name' => $pet->getName(),
'type' => $pet->getType(),
'photoUrls' => $pet->getPhotoUrls(),
];
return new JsonResponse($data, Response::HTTP_OK);
}
/**
* @Route("pets", name="get_all_pets", methods={"GET"})
*/
public function getAll(): JsonResponse
{
$pets = $this->petRepository->findAll();
$data = [];
foreach ($pets as $pet) {
$data[] = [
'id' => $pet->getId(),
'name' => $pet->getName(),
'type' => $pet->getType(),
'photoUrls' => $pet->getPhotoUrls(),
];
}
return new JsonResponse($data, Response::HTTP_OK);
}
/**
* @Route("pet/{id}", name="update_pet", methods={"PUT"})
*/
public function update($id, Request $request): JsonResponse
{
$pet = $this->petRepository->findOneBy(['id' => $id]);
$data = json_decode($request->getContent(), true);
empty($data['name']) ? true : $pet->setName($data['name']);
empty($data['type']) ? true : $pet->setType($data['type']);
empty($data['photoUrls']) ? true : $pet->setPhotoUrls($data['photoUrls']);
$updatedPet = $this->petRepository->updatePet($pet);
return new JsonResponse(['status' => 'Pet updated!'], Response::HTTP_OK);
}
/**
* @Route("pet/{id}", name="delete_pet", methods={"DELETE"})
*/
public function delete($id): JsonResponse
{
$pet = $this->petRepository->findOneBy(['id' => $id]);
$this->petRepository->removePet($pet);
return new JsonResponse(['status' => 'Pet deleted'], Response::HTTP_OK);
}
}
?>