From 3edae845f00f9bce6aaf27a7302861ffc1752393 Mon Sep 17 00:00:00 2001 From: afornerot Date: Mon, 14 Feb 2022 09:59:14 +0100 Subject: [PATCH] mise en place d'un controleur REST --- .../config/packages/fos_rest.yaml | 24 ++-- .../config/packages/nelmio_api_doc.yaml | 6 +- .../config/routes/nelmio_api_doc.yaml | 14 +- src/schedule-2.0/config/services.yaml | 4 + src/schedule-2.0/scripts/proxy.sh | 2 - .../src/Controller/RestController.php | 134 ++++++++++++++++++ 6 files changed, 154 insertions(+), 30 deletions(-) create mode 100644 src/schedule-2.0/src/Controller/RestController.php diff --git a/src/schedule-2.0/config/packages/fos_rest.yaml b/src/schedule-2.0/config/packages/fos_rest.yaml index d96294e..f3426cd 100644 --- a/src/schedule-2.0/config/packages/fos_rest.yaml +++ b/src/schedule-2.0/config/packages/fos_rest.yaml @@ -1,15 +1,11 @@ # Read the documentation: https://symfony.com/doc/master/bundles/FOSRestBundle/index.html -fos_rest: null -# param_fetcher_listener: true -# allowed_methods_listener: true -# routing_loader: true -# view: -# view_response_listener: true -# exception: -# codes: -# App\Exception\MyException: 403 -# messages: -# App\Exception\MyException: Forbidden area. -# format_listener: -# rules: -# - { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json, html ] } +fos_rest: + param_fetcher_listener: true + body_listener: true + + format_listener: + enabled: true + rules: + - { path: '/rest', priorities: ['json', 'xml'], fallback_format: 'html' } + - { path: '/', fallback_format: 'html' } + diff --git a/src/schedule-2.0/config/packages/nelmio_api_doc.yaml b/src/schedule-2.0/config/packages/nelmio_api_doc.yaml index 4e68479..903cf1d 100644 --- a/src/schedule-2.0/config/packages/nelmio_api_doc.yaml +++ b/src/schedule-2.0/config/packages/nelmio_api_doc.yaml @@ -1,9 +1,9 @@ nelmio_api_doc: documentation: info: - title: My App - description: This is an awesome app! + title: '%appName%' + description: version: 1.0.0 areas: # to filter documented areas path_patterns: - - ^/api(?!/doc$) # Accepts routes under /api except /api/doc + - /rest # Accepts routes under /rest except /rest/doc diff --git a/src/schedule-2.0/config/routes/nelmio_api_doc.yaml b/src/schedule-2.0/config/routes/nelmio_api_doc.yaml index 364b4af..ac1d4f9 100644 --- a/src/schedule-2.0/config/routes/nelmio_api_doc.yaml +++ b/src/schedule-2.0/config/routes/nelmio_api_doc.yaml @@ -1,12 +1,4 @@ -# Expose your documentation as JSON swagger compliant -app.swagger: - path: /api/doc.json +app_swagger_ui: + path: /rest methods: GET - defaults: { _controller: nelmio_api_doc.controller.swagger } - -## Requires the Asset component and the Twig bundle -## $ composer require twig asset -#app.swagger_ui: -# path: /api/doc -# methods: GET -# defaults: { _controller: nelmio_api_doc.controller.swagger_ui } + defaults: { _controller: nelmio_api_doc.controller.swagger_ui } diff --git a/src/schedule-2.0/config/services.yaml b/src/schedule-2.0/config/services.yaml index fca556d..e302fc4 100644 --- a/src/schedule-2.0/config/services.yaml +++ b/src/schedule-2.0/config/services.yaml @@ -6,6 +6,7 @@ parameters: appAlias: '%env(resolve:APP_ALIAS)%' appAuth: '%env(resolve:APP_AUTH)%' + appSecret: '%env(resolve:APP_SECRET)%' appName: '%env(resolve:APP_NAME)%' appEnv: '%env(resolve:APP_ENV)%' appCron: '%env(resolve:APP_CRON)%' @@ -80,3 +81,6 @@ services: public: true class: App\Service\mailService arguments: ["@mailer", "@twig"] + + App\Controller\RestController: + public: true \ No newline at end of file diff --git a/src/schedule-2.0/scripts/proxy.sh b/src/schedule-2.0/scripts/proxy.sh index 128d600..a9b4898 100644 --- a/src/schedule-2.0/scripts/proxy.sh +++ b/src/schedule-2.0/scripts/proxy.sh @@ -1,4 +1,2 @@ #!/bin/bash # Si besoin export des valeurs de HTTP_PROXY et HTTPS_PROXY -export HTTP_PROXY="192.168.57.160:8080" -export HTTPS_PROXY="192.168.57.160:8080" diff --git a/src/schedule-2.0/src/Controller/RestController.php b/src/schedule-2.0/src/Controller/RestController.php new file mode 100644 index 0000000..77ddecc --- /dev/null +++ b/src/schedule-2.0/src/Controller/RestController.php @@ -0,0 +1,134 @@ +getDoctrine()->getManager(); + + // Récupération des parametres + $key=$request->get("key"); + $username=$request->get("username"); + + if($key!=$this->getParameter("appSecret")) { + $view = $this->view("API Key inconnue", 403); + return $this->handleView($view); + } + + $user=$em->getRepository("App:User")->findOneBy(["username"=>$username]); + if(!$user) { + $view = $this->view("User inconnue", 403); + return $this->handleView($view); + } + + // On formate le tableau de jour + $start=new \Datetime('00:00'); + $start->modify("monday this week"); + $end=new \Datetime('00:00'); + $end->modify("last day of this month"); + $end->modify("next sunday"); + + + $events = $em + ->createQueryBuilder('event') + ->select('event') + ->from('App:Event','event') + ->Where('event.user=:user AND event.start>=:start AND event.end <:end') + ->setParameter('user',$user) + ->setParameter('start',$start) + ->setParameter('end',$end) + ->getQuery()->getResult(); + + + $output=[ + "start"=>$start->format("d/m/Y"), + "end"=>$end->format("d/m/Y"), + "events"=>[], + ]; + + $tbnature=[-200,-190,-100]; + foreach($events as $event) { + if(in_array($event->getTask()->getNature()->getId(),$tbnature)) { + $tmp = [ + "eventstart"=>$event->getStart(), + "eventend"=>$event->getEnd(), + "eventallday"=>$event->getAllday(), + "taskid"=>$event->getTask()->getId(), + "taskname"=>$event->getTask()->getName(), + "natureid"=>$event->getTask()->getNature()->getId(), + "naturename"=>$event->getTask()->getNature()->getName(), + ]; + + array_push($output["events"],$tmp); + } + } + + $events = $em + ->createQueryBuilder('breakday') + ->select('breakday') + ->from('App:Breakday','breakday') + ->Where('breakday.start>=:start AND breakday.end <:end') + ->setParameter('start',$start) + ->setParameter('end',$end) + ->getQuery()->getResult(); + + foreach($events as $event) { + $tmp = [ + "eventstart"=>$event->getStart(), + "eventend"=>$event->getEnd(), + "eventallday"=>true, + "taskid"=>null, + "taskname"=>"Jour Férié", + "natureid"=>null, + "naturename"=>"Jour Férié", + ]; + + array_push($output["events"],$tmp); + } + + $view = $this->view($output, 200); + return $this->handleView($view); + } +} \ No newline at end of file