diff --git a/config/routes/routes.yaml b/config/routes/routes.yaml index f8515ba..2750e40 100755 --- a/config/routes/routes.yaml +++ b/config/routes/routes.yaml @@ -110,35 +110,35 @@ pet_remove: api_users_list: path: api/v1/users - controller: App\Controller\ApiUserController::list + controller: App\Controller\Api\UserController::list defaults: _format: json methods: GET api_users_show: path: api/v1/users/{id} - controller: App\Controller\ApiUserController::show + controller: App\Controller\Api\UserController::show defaults: _format: json methods: GET api_users_new: path: api/v1/users - controller: App\Controller\ApiUserController:new + controller: App\Controller\Api\UserController:new defaults: _format: json methods: POST api_users_edit: path: api/v1/users/{id} - controller: App\Controller\ApiUserController::edit + controller: App\Controller\Api\UserController::edit defaults: _format: json methods: PUT api_users_delete: path: api/v1/users/{id} - controller: App\Controller\ApiUserController::delete + controller: App\Controller\Api\UserController::delete defaults: _format: json methods: DELETE @@ -149,35 +149,42 @@ api_users_delete: api_clinics_list: path: api/v1/clinics - controller: App\Controller\ApiClinicController::list + controller: App\Controller\Api\ClinicController::list defaults: _format: json methods: GET api_clinics_show: path: api/v1/clinics/{id} - controller: App\Controller\ApiClinicController::show + controller: App\Controller\Api\ClinicController::show + defaults: + _format: json + methods: GET + +api_clinics_show_veterinaries: + path: api/v1/clinics/{id}/addresses + controller: App\Controller\Api\ClinicController::showAddress defaults: _format: json methods: GET api_clinics_new: path: api/v1/clinics - controller: App\Controller\ApiClinicController:new + controller: App\Controller\Api\ClinicController:new defaults: _format: json methods: POST api_clinics_edit: path: api/v1/clinics/{id} - controller: App\Controller\ApiClinicController::edit + controller: App\Controller\Api\ClinicController::edit defaults: _format: json methods: PUT api_clinics_delete: path: api/v1/clinics/{id} - controller: App\Controller\ApiClinicController::delete + controller: App\Controller\Api\ClinicController::delete defaults: _format: json methods: DELETE @@ -188,35 +195,42 @@ api_clinics_delete: api_veterinaries_list: path: api/v1/veterinaries - controller: App\Controller\ApiVeterinaryController::list + controller: App\Controller\Api\VeterinaryController::list defaults: _format: json methods: GET api_veterinaries_show: path: api/v1/veterinaries/{id} - controller: App\Controller\ApiVeterinaryController::show + controller: App\Controller\Api\VeterinaryController::show + defaults: + _format: json + methods: GET + +api_veterinaries_show_address: + path: api/v1/veterinaries/{id}/addresses + controller: App\Controller\Api\VeterinaryController::showAddress defaults: _format: json methods: GET api_veterinaries_new: path: api/v1/veterinaries - controller: App\Controller\ApiVeterinaryController:new + controller: App\Controller\Api\VeterinaryController:new defaults: _format: json methods: POST api_veterinaries_edit: path: api/v1/veterinaries/{id} - controller: App\Controller\ApiVeterinaryController::edit + controller: App\Controller\Api\VeterinaryController::edit defaults: _format: json methods: PUT api_veterinaries_delete: path: api/v1/veterinaries/{id} - controller: App\Controller\ApiVeterinaryController::delete + controller: App\Controller\Api\VeterinaryController::delete defaults: _format: json methods: DELETE @@ -227,35 +241,49 @@ api_veterinaries_delete: api_pets_list: path: api/v1/pets - controller: App\Controller\ApiPetController::list + controller: App\Controller\Api\PetController::list defaults: _format: json methods: GET api_pets_show: path: api/v1/pets/{id} - controller: App\Controller\ApiPetController::show + controller: App\Controller\Api\PetController::show + defaults: + _format: json + methods: GET + +api_pets_show_owner: + path: api/v1/pets/{id}/owners + controller: App\Controller\Api\PetController::showOwner + defaults: + _format: json + methods: GET + +api_pets_show_owner_address: + path: api/v1/pets/{id}/owners/addresses + controller: App\Controller\Api\PetController::showOwnerAddress defaults: _format: json methods: GET api_pets_new: path: api/v1/pets - controller: App\Controller\ApiPetController:new + controller: App\Controller\Api\PetController:new defaults: _format: json methods: POST api_pets_edit: path: api/v1/pets/{id} - controller: App\Controller\ApiPetController::edit + controller: App\Controller\Api\PetController::edit defaults: _format: json methods: PUT api_pets_delete: path: api/v1/pets/{id} - controller: App\Controller\ApiPetController::delete + controller: App\Controller\Api\PetController::delete defaults: _format: json methods: DELETE \ No newline at end of file diff --git a/src/Controller/ApiClinicController.php b/src/Controller/Api/ClinicController.php similarity index 57% rename from src/Controller/ApiClinicController.php rename to src/Controller/Api/ClinicController.php index 8c7ffa6..d48ae5d 100644 --- a/src/Controller/ApiClinicController.php +++ b/src/Controller/Api/ClinicController.php @@ -15,17 +15,11 @@ use Symfony\Component\Serializer\Serializer; use Symfony\Component\HttpFoundation\Response; -class ApiClinicController extends AbstractController +class ClinicController extends AbstractController { - public function index() - { - return new JsonResponse(['status' => 'ok']); - } - public function list() { - $clinics = $this->getDoctrine() - ->getRepository('App\Entity\Clinic') + $clinics = $this->getDoctrine()->getRepository(Clinic::class) ->findAll(); $encoders = [new XmlEncoder(), new JsonEncoder()]; @@ -33,9 +27,7 @@ public function list() $serializer = new Serializer($normalizers, $encoders); $jsonContent = $serializer->serialize($clinics, 'json', [ - 'circular_reference_handler' => function ($object) { - return $object->getId(); - } + 'ignored_attributes' => ['veterinaries'] ]); return new Response($jsonContent); @@ -48,10 +40,9 @@ public function show(Clinic $clinic) $serializer = new Serializer($normalizers, $encoders); $jsonContent = $serializer->serialize($clinic, 'json', [ - 'circular_reference_handler' => function ($object) { - return $object->getId(); - } + 'ignored_attributes' => ['veterinaries'] ]); + return new Response($jsonContent); } @@ -65,20 +56,21 @@ public function new(Request $request) $clinic = new Clinic(); $clinic->setName($request->get('name')); $clinic->setAddress($address); - + + $form = $this->createForm(ClinicType::class, $clinic); + $form->submit($clinic); + $entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($clinic); $entityManager->flush(); - return new JsonResponse(['msg' => 'Clinic created whit success!'], Response::HTTP_OK); + $response = new JsonResponse(['msg'=>'Clinic created whit success!'], Response::HTTP_CREATED); + + return $response; } - public function edit(Request $request, $clinic) + public function edit(Request $request, Clinic $clinic) { - if (empty($clinic)) { - return new JsonResponse(['msg' => 'Clinic not found!'], Response::HTTP_NOT_FOUND); - } - $address = $clinic->getAddress(); $address->setStreet($request->get('street')); $address->setNumber($request->get('number')); @@ -87,30 +79,25 @@ public function edit(Request $request, $clinic) $clinic->setName($request->get('name')); $clinic->setAddress($address); - if (!empty($clinic->getName())) { - $entityManager = $this->getDoctrine()->getManager(); - $entityManager->flush(); - - return new JsonResponse(['msg' => 'Clinic edited whit success!'], Response::HTTP_OK); - } - - return new JsonResponse(['msg' => 'Check the empty fields'], Response::HTTP_NOT_ACCEPTABLE); + $form = $this->createForm(ClinicType::class, $clinic); + $form->submit($clinic); + + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->flush(); + + $response = new JsonResponse(['msg'=>'Clinic edited whit success!'], Response::HTTP_OK); + + return $response; } - public function delete($clinic) + public function delete(Clinic $clinic) { - if (empty($clinic)) { - return new JsonResponse(['msg' => 'Clinic not found!'], Response::HTTP_NOT_FOUND); - } - - if (!empty($clinic)) { - $entityManager = $this->getDoctrine()->getManager(); - $entityManager->remove($clinic); - $entityManager->flush(); - - return new JsonResponse(['msg' => 'Clinic deleted whit success!'], Response::HTTP_OK); - } + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->remove($clinic); + $entityManager->flush(); - return new JsonResponse(['msg' => 'We could not find'], Response::HTTP_NOT_ACCEPTABLE); + $response = new JsonResponse(['msg'=>'Clinic deleted whit success!'], Response::HTTP_OK); + + return $response; } } diff --git a/src/Controller/ApiPetController.php b/src/Controller/Api/PetController.php similarity index 50% rename from src/Controller/ApiPetController.php rename to src/Controller/Api/PetController.php index 1368d5b..1e3f8fd 100644 --- a/src/Controller/ApiPetController.php +++ b/src/Controller/Api/PetController.php @@ -5,11 +5,9 @@ use App\Entity\Pet; use App\Entity\User; use App\Form\PetType; - use Symfony\Component\HttpFoundation\Request; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; - use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Encoder\XmlEncoder; @@ -17,17 +15,11 @@ use Symfony\Component\Serializer\Serializer; use Symfony\Component\HttpFoundation\Response; -class ApiPetController extends AbstractController +class PetController extends AbstractController { - public function index() - { - return new JsonResponse(['status' => 'ok']); - } - public function list() { - $pets = $this->getDoctrine() - ->getRepository('App\Entity\Pet') + $pets = $this->getDoctrine()->getRepository(Pet::class) ->findAll(); $encoders = [new XmlEncoder(), new JsonEncoder()]; @@ -35,9 +27,7 @@ public function list() $serializer = new Serializer($normalizers, $encoders); $jsonContent = $serializer->serialize($pets, 'json', [ - 'circular_reference_handler' => function ($object) { - return $object->getId(); - } + 'ignored_attributes' => ['owner' => 'address'] ]); return new Response($jsonContent); @@ -50,60 +40,52 @@ public function show(Pet $pet) $serializer = new Serializer($normalizers, $encoders); $jsonContent = $serializer->serialize($pet, 'json', [ - 'circular_reference_handler' => function ($object) { - return $object->getId(); - } + 'ignored_attributes' => ['owner' => 'address'] ]); - + return new Response($jsonContent); } public function new(Request $request) { - $owner = $this->getDoctrine()->getRepository('App\Entity\User')->find($request->get('owner')); + // reference: https://symfonycasts.com/screencast/symfony-rest/form-post + $data = json_decode($request->getContent(), true); $pet = new Pet(); - $pet->setName($request->get('name')); - $pet->setDateBirth($request->get('dateBirth')); - $pet->setWeigth($request->get('weigth')); - $pet->setType($request->get('type')); - $pet->setBreed($request->get('breed')); - $pet->setOwner($owner); - + $form = $this->createForm(PetType::class, $pet); + $form->submit($data); + $entityManager = $this->getDoctrine()->getManager(); - $entityManager->persist($pet); $entityManager->flush(); + + $response = new Response('Pet created whit success!', Response::HTTP_CREATED); + $response->headers->set('Location', '/some/programmer/url'); - return new JsonResponse(['msg' => 'Pet created whit success!'], Response::HTTP_OK); + return $response; } - public function edit(Request $request, $pet) + public function edit(Request $request, Pet $pet) { - $owner = $this->getDoctrine()->getRepository('App\Entity\User')->find($request->get('owner')); - - if (empty($pet)) { - return new JsonResponse(['msg' => 'Pet not found!'], Response::HTTP_NOT_FOUND); - } + // reference: https://symfonycasts.com/screencast/symfony-rest/form-post + $data = json_decode($request->getContent(), true); - $pet->setName($request->get('name')); - $pet->setDateBirth($request->get('dateBirth')); - $pet->setWeigth($request->get('weigth')); - $pet->setType($request->get('type')); - $pet->setBreed($request->get('breed')); - $pet->setOwner($owner); - - if (!empty($pet->getPetName())) { - $entityManager = $this->getDoctrine()->getManager(); - $entityManager->flush(); + $pet = new Pet(); + $form = $this->createForm(PetType::class, $pet); + $form->submit($data); - return new JsonResponse(['msg' => 'Pet edited whit success!'], Response::HTTP_OK); - } + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->flush(); - return new JsonResponse(['msg' => 'Check the empty fields'], Response::HTTP_NOT_ACCEPTABLE); + $response = new Response('Pet edited whit success!', Response::HTTP_OK); + $response->headers->set('Location', '/some/programmer/url'); + + return $response; } - public function delete($pet) + public function delete(Pet $pet) { + $pet = $this->getDoctrine()->getRepository(Pet::class) + ->find($pet); if (empty($pet)) { return new JsonResponse(['msg' => 'Pet not found!'], Response::HTTP_NOT_FOUND); @@ -117,6 +99,6 @@ public function delete($pet) return new JsonResponse(['msg' => 'Pet deleted whit success!'], Response::HTTP_OK); } - return new JsonResponse(['msg' => 'We could not find'], Response::HTTP_NOT_ACCEPTABLE); + return new JsonResponse(['msg' => 'We could not find'], Response::HTTP_BAD_REQUEST); } } diff --git a/src/Controller/ApiUserController.php b/src/Controller/Api/UserController.php similarity index 60% rename from src/Controller/ApiUserController.php rename to src/Controller/Api/UserController.php index 58e0c76..832e709 100644 --- a/src/Controller/ApiUserController.php +++ b/src/Controller/Api/UserController.php @@ -15,16 +15,11 @@ use Symfony\Component\Serializer\Serializer; use Symfony\Component\HttpFoundation\Response; -class ApiUserController extends AbstractController +class UserController extends AbstractController { - public function index() - { - return new JsonResponse(['status' => 'ok']); - } - public function list() { - $users = $this->getDoctrine()->getRepository('App\Entity\User') + $users = $this->getDoctrine()->getRepository(User::class) ->findAll(); $encoders = [new XmlEncoder(), new JsonEncoder()]; @@ -55,58 +50,52 @@ public function new(Request $request) $address->setCity($request->get('city')); $user = new User(); - $user->setUserName($request->get('userName')); + $user->setUserName($request->get('name')); $user->setEmail($request->get('email')); $user->setAddress($address); $form = $this->createForm(UserType::class, $user); + $form->submit($user); $entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($user); $entityManager->flush(); - return new JsonResponse(['msg' => 'User created whit success!'], Response::HTTP_OK); + $response = new JsonResponse(['msg'=>'User created whit success!'], Response::HTTP_CREATED); + + return $response; } - public function edit(Request $request, $user) + public function edit(Request $request, User $user) { - if (empty($user)) { - return new JsonResponse(['msg' => 'User not found!'], Response::HTTP_NOT_FOUND); - } - $address = $user->getAddress(); $address->setStreet($request->get('street')); $address->setNumber($request->get('number')); $address->setCity($request->get('city')); - $user->setUserName($request->get('userName')); + $user->setUserName($request->get('name')); $user->setEmail($request->get('email')); $user->setAddress($address); - if (!empty($user->getUserName())) { - $entityManager = $this->getDoctrine()->getManager(); - $entityManager->flush(); - - return new JsonResponse(['msg' => 'User edited whit success!'], Response::HTTP_OK); - } - - return new JsonResponse(['msg' => 'Check the empty fields'], Response::HTTP_NOT_ACCEPTABLE); + $form = $this->createForm(UserType::class, $user); + $form->submit($user); + + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->flush(); + + $response = new JsonResponse(['msg'=>'User edited whit success!'], Response::HTTP_OK); + + return $response; } - public function delete($user) + public function delete(User $user) { - if (empty($user)) { - return new JsonResponse(['msg' => 'User not found!'], Response::HTTP_NOT_FOUND); - } - - if (!empty($user)) { - $entityManager = $this->getDoctrine()->getManager(); - $entityManager->remove($user); - $entityManager->flush(); - - return new JsonResponse(['msg' => 'User deleted whit success!'], Response::HTTP_OK); - } + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->remove($user); + $entityManager->flush(); - return new JsonResponse(['msg' => 'We could not find'], Response::HTTP_NOT_ACCEPTABLE); + $response = new JsonResponse(['msg'=>'User deleted whit success!'], Response::HTTP_OK); + + return $response; } } diff --git a/src/Controller/ApiVeterinaryController.php b/src/Controller/Api/VeterinaryController.php similarity index 59% rename from src/Controller/ApiVeterinaryController.php rename to src/Controller/Api/VeterinaryController.php index 4e7da5e..18bb9f9 100644 --- a/src/Controller/ApiVeterinaryController.php +++ b/src/Controller/Api/VeterinaryController.php @@ -16,17 +16,12 @@ use Symfony\Component\Serializer\Serializer; use Symfony\Component\HttpFoundation\Response; -class ApiVeterinaryController extends AbstractController +class VeterinaryController extends AbstractController { - public function index() - { - return new JsonResponse(['status' => 'ok']); - } - public function list() { $veterinaries = $this->getDoctrine() - ->getRepository('App\Entity\Veterinary') + ->getRepository(Veterinary::class) ->findAll(); $encoders = [new XmlEncoder(), new JsonEncoder()]; @@ -34,9 +29,7 @@ public function list() $serializer = new Serializer($normalizers, $encoders); $jsonContent = $serializer->serialize($veterinaries, 'json', [ - 'circular_reference_handler' => function ($object) { - return $object->getId(); - } + 'ignored_attributes' => ['clinic'] ]); return new Response($jsonContent); @@ -49,10 +42,9 @@ public function show(Veterinary $veterinary) $serializer = new Serializer($normalizers, $encoders); $jsonContent = $serializer->serialize($veterinary, 'json', [ - 'circular_reference_handler' => function ($object) { - return $object->getId(); - } + 'ignored_attributes' => ['clinic'] ]); + return new Response($jsonContent); } @@ -63,60 +55,61 @@ public function new(Request $request) $address->setNumber($request->get('number')); $address->setCity($request->get('city')); + $clinic = $this->getDoctrine()->getRepository('App\Entity\Clinic') + ->find($request->get('clinic')); + $veterinary = new Veterinary(); $veterinary->setName($request->get('name')); $veterinary->setCrmv($request->get('crmv')); $veterinary->setAddress($address); - + $veterinary->addClinic($clinic); + + $form = $this->createForm(VeterinaryType::class, $veterinary); + $form->submit($veterinary); + $entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($veterinary); $entityManager->flush(); - return new JsonResponse(['msg' => 'Veterinary created whit success!'], Response::HTTP_OK); + $response = new JsonResponse(['msg'=>'Veterinary created whit success!'], Response::HTTP_CREATED); + + return $response; } - public function edit(Request $request, $veterinary) + public function edit(Request $request, Veterinary $veterinary) { - $clinic = $this->getDoctrine()->getRepository('App\Entity\Clinic')->find($request->get('clinic')); - - if (empty($veterinary)) { - return new JsonResponse(['msg' => 'Veterinary not found!'], Response::HTTP_NOT_FOUND); - } - - $address = $veterinary->getAddress(); + $address = new Address(); $address->setStreet($request->get('street')); $address->setNumber($request->get('number')); $address->setCity($request->get('city')); + $clinic = $this->getDoctrine()->getRepository('App\Entity\Clinic') + ->find($request->get('clinic')); + $veterinary->setName($request->get('name')); $veterinary->setCrmv($request->get('crmv')); - $veterinary->addClinic($clinic); $veterinary->setAddress($address); + $veterinary->addClinic($clinic); - if (!empty($veterinary->getName())) { - $entityManager = $this->getDoctrine()->getManager(); - $entityManager->flush(); - - return new JsonResponse(['msg' => 'Veterinary edited whit success!'], Response::HTTP_OK); - } - - return new JsonResponse(['msg' => 'Check the empty fields'], Response::HTTP_NOT_ACCEPTABLE); + $form = $this->createForm(VeterinaryType::class, $veterinary); + $form->submit($veterinary); + + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->flush(); + + $response = new JsonResponse(['msg'=>'Veterinary edited whit success!'], Response::HTTP_OK); + + return $response; } - public function delete($veterinary) + public function delete(Veterinary $veterinary) { - if (empty($veterinary)) { - return new JsonResponse(['msg' => 'Veterinary not found!'], Response::HTTP_NOT_FOUND); - } - - if (!empty($veterinary)) { - $entityManager = $this->getDoctrine()->getManager(); - $entityManager->remove($veterinary); - $entityManager->flush(); - - return new JsonResponse(['msg' => 'Veterinary deleted whit success!'], Response::HTTP_OK); - } + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->remove($veterinary); + $entityManager->flush(); - return new JsonResponse(['msg' => 'We could not find'], Response::HTTP_NOT_ACCEPTABLE); + $response = new JsonResponse(['msg'=>'Veterinary deleted whit success!'], Response::HTTP_OK); + + return $response; } } diff --git a/src/Entity/Pet.php b/src/Entity/Pet.php index b97623e..b283a01 100644 --- a/src/Entity/Pet.php +++ b/src/Entity/Pet.php @@ -68,7 +68,7 @@ public function getDateBirth(): ?\DateTimeInterface { return $this->dateBirth; } - + public function setDateBirth(\DateTimeInterface $dateBirth): self { $this->dateBirth = $dateBirth; diff --git a/src/Form/PetType.php b/src/Form/PetType.php new file mode 100644 index 0000000..0fb046c --- /dev/null +++ b/src/Form/PetType.php @@ -0,0 +1,36 @@ +add('name', TextType::class) + ->add('dateBirth', DateType::class, ['widget' => 'single_text']) + ->add('weight', TextType::class) + ->add('type', TextType::class) + ->add('breed', TextType::class) + ->add('owner', EntityType::class, [ + 'class' => User::class, + 'choice_label' => 'userName', + ]); + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'data_class' => Pet::class, + ]); + } +}