mise en place d'un controleur REST

This commit is contained in:
afornerot
2022-02-14 09:59:14 +01:00
parent 0ba36598fa
commit 3edae845f0
6 changed files with 154 additions and 30 deletions

View File

@@ -1,15 +1,11 @@
# Read the documentation: https://symfony.com/doc/master/bundles/FOSRestBundle/index.html # Read the documentation: https://symfony.com/doc/master/bundles/FOSRestBundle/index.html
fos_rest: null fos_rest:
# param_fetcher_listener: true param_fetcher_listener: true
# allowed_methods_listener: true body_listener: true
# routing_loader: true
# view: format_listener:
# view_response_listener: true enabled: true
# exception: rules:
# codes: - { path: '/rest', priorities: ['json', 'xml'], fallback_format: 'html' }
# App\Exception\MyException: 403 - { path: '/', fallback_format: 'html' }
# messages:
# App\Exception\MyException: Forbidden area.
# format_listener:
# rules:
# - { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json, html ] }

View File

@@ -1,9 +1,9 @@
nelmio_api_doc: nelmio_api_doc:
documentation: documentation:
info: info:
title: My App title: '%appName%'
description: This is an awesome app! description:
version: 1.0.0 version: 1.0.0
areas: # to filter documented areas areas: # to filter documented areas
path_patterns: path_patterns:
- ^/api(?!/doc$) # Accepts routes under /api except /api/doc - /rest # Accepts routes under /rest except /rest/doc

View File

@@ -1,12 +1,4 @@
# Expose your documentation as JSON swagger compliant app_swagger_ui:
app.swagger: path: /rest
path: /api/doc.json
methods: GET methods: GET
defaults: { _controller: nelmio_api_doc.controller.swagger } defaults: { _controller: nelmio_api_doc.controller.swagger_ui }
## 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 }

View File

@@ -6,6 +6,7 @@
parameters: parameters:
appAlias: '%env(resolve:APP_ALIAS)%' appAlias: '%env(resolve:APP_ALIAS)%'
appAuth: '%env(resolve:APP_AUTH)%' appAuth: '%env(resolve:APP_AUTH)%'
appSecret: '%env(resolve:APP_SECRET)%'
appName: '%env(resolve:APP_NAME)%' appName: '%env(resolve:APP_NAME)%'
appEnv: '%env(resolve:APP_ENV)%' appEnv: '%env(resolve:APP_ENV)%'
appCron: '%env(resolve:APP_CRON)%' appCron: '%env(resolve:APP_CRON)%'
@@ -80,3 +81,6 @@ services:
public: true public: true
class: App\Service\mailService class: App\Service\mailService
arguments: ["@mailer", "@twig"] arguments: ["@mailer", "@twig"]
App\Controller\RestController:
public: true

View File

@@ -1,4 +1,2 @@
#!/bin/bash #!/bin/bash
# Si besoin export des valeurs de HTTP_PROXY et HTTPS_PROXY # 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"

View File

@@ -0,0 +1,134 @@
<?php
namespace App\Controller;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use Symfony\Component\HttpFoundation\Request;
use FOS\RestBundle\Controller\Annotations as FOSRest;
use Swagger\Annotations as SWG;
use App\Entity\Cache;
class RestController extends AbstractFOSRestController
{
private $output=[];
private $cpt;
/**
* Return list of maps
*
*
* @FOSRest\Post("/rest/getBreakdays")
* @SWG\Response(
* response=200,
* description="Return list of breakday events"
* )
* )
* @SWG\Parameter(
* name="key",
* in="formData",
* required=true,
* description="APIKey",
* type="string"
* )
* @SWG\Parameter(
* name="username",
* in="formData",
* required=true,
* description="username",
* type="string"
* )
*/
public function getBreakdays(Request $request) {
set_time_limit(0);
ini_set('memory_limit', '1024M');
// Initalisation Manager
$em = $this->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);
}
}