Merge branch 'onTheFly' of gitlab.com:Chill-Projet/chill-bundles into onTheFly

This commit is contained in:
Mathieu Jaumotte 2021-09-29 11:42:40 +02:00
commit 5b7484b1ce
4 changed files with 128 additions and 22 deletions

View File

@ -59,27 +59,23 @@ class ChillThirdPartyExtension extends Extension implements PrependExtensionInte
'class' => \Chill\ThirdPartyBundle\Entity\ThirdParty::class, 'class' => \Chill\ThirdPartyBundle\Entity\ThirdParty::class,
'name' => 'thirdparty', 'name' => 'thirdparty',
'base_path' => '/api/1.0/thirdparty/thirdparty', 'base_path' => '/api/1.0/thirdparty/thirdparty',
'base_role' => \Chill\ThirdPartyBundle\Security\Authorization\ThirdPartyVoter::class, //'base_role' => \Chill\ThirdPartyBundle\Security\Authorization\ThirdPartyVoter::SHOW,
//'controller' => \Chill\ThirdPartyBundle\Controller\ThirdPartyApiController::class, //'controller' => \Chill\ThirdPartyBundle\Controller\ThirdPartyApiController::class,
'actions' => [ 'actions' => [
'_index' => [
'methods' => [
Request::METHOD_GET => true,
Request::METHOD_HEAD => true,
Request::METHOD_POST => true,
],
],
'_entity' => [ '_entity' => [
'methods' => [ 'methods' => [
Request::METHOD_GET => true, Request::METHOD_GET => true,
Request::METHOD_HEAD => true, Request::METHOD_HEAD => true,
Request::METHOD_POST=> true, Request::METHOD_POST => true,
Request::METHOD_PUT => true,
Request::METHOD_PATCH => true
], ],
'roles' => [ 'roles' => [
Request::METHOD_GET => \Chill\ThirdPartyBundle\Security\Voter\ThirdPartyVoter::SHOW, Request::METHOD_GET => \Chill\ThirdPartyBundle\Security\Voter\ThirdPartyVoter::SHOW,
Request::METHOD_HEAD => \Chill\ThirdPartyBundle\Security\Voter\ThirdPartyVoter::SHOW, Request::METHOD_HEAD => \Chill\ThirdPartyBundle\Security\Voter\ThirdPartyVoter::SHOW,
Request::METHOD_POST => \Chill\ThirdPartyBundle\Security\Voter\ThirdPartyVoter::CREATE, Request::METHOD_POST => \Chill\ThirdPartyBundle\Security\Voter\ThirdPartyVoter::CREATE,
Request::METHOD_PUT => \Chill\ThirdPartyBundle\Security\Voter\ThirdPartyVoter::CREATE,
Request::METHOD_PATCH => \Chill\ThirdPartyBundle\Security\Voter\ThirdPartyVoter::CREATE
], ],
] ]
] ]

View File

@ -60,7 +60,7 @@ class ThirdParty
* @var string * @var string
* @ORM\Column(name="name", type="string", length=255) * @ORM\Column(name="name", type="string", length=255)
* @Assert\Length(min="2") * @Assert\Length(min="2")
* @Groups({"read"}) * @Groups({"read", "write"})
*/ */
private $name; private $name;
@ -69,6 +69,7 @@ class ThirdParty
* @var string * @var string
* @ORM\Column(name="name_company", type="string", length=255, nullable=true) * @ORM\Column(name="name_company", type="string", length=255, nullable=true)
* @Assert\Length(min="3") * @Assert\Length(min="3")
* @Groups({"read", "write"})
*/ */
private $nameCompany; private $nameCompany;
@ -77,6 +78,7 @@ class ThirdParty
* @var string * @var string
* @ORM\Column(name="acronym", type="string", length=64, nullable=true) * @ORM\Column(name="acronym", type="string", length=64, nullable=true)
* @Assert\Length(min="2") * @Assert\Length(min="2")
* @Groups({"read", "write"})
*/ */
private $acronym; private $acronym;
@ -94,7 +96,7 @@ class ThirdParty
* @ORM\Column(name="types", type="json", nullable=true) * @ORM\Column(name="types", type="json", nullable=true)
* @Assert\Count(min=1) * @Assert\Count(min=1)
*/ */
private $type; private $types;
/** /**
* Contact Persons: One Institutional ThirdParty has Many Contact Persons * Contact Persons: One Institutional ThirdParty has Many Contact Persons
@ -130,7 +132,7 @@ class ThirdParty
* @Assert\Regex("/^([\+{1}])([0-9\s*]{4,20})$/", * @Assert\Regex("/^([\+{1}])([0-9\s*]{4,20})$/",
* message="Invalid phone number: it should begin with the international prefix starting with ""+"", hold only digits and be smaller than 20 characters. Ex: +33123456789" * message="Invalid phone number: it should begin with the international prefix starting with ""+"", hold only digits and be smaller than 20 characters. Ex: +33123456789"
* ) * )
* @Groups({"read"}) * @Groups({"read", "write"})
*/ */
private $telephone; private $telephone;
@ -138,7 +140,7 @@ class ThirdParty
* @var string|null * @var string|null
* @ORM\Column(name="email", type="string", length=255, nullable=true) * @ORM\Column(name="email", type="string", length=255, nullable=true)
* @Assert\Email(checkMX=false) * @Assert\Email(checkMX=false)
* @Groups({"read"}) * @Groups({"read", "write"})
*/ */
private $email; private $email;
@ -147,7 +149,7 @@ class ThirdParty
* @ORM\ManyToOne(targetEntity="\Chill\MainBundle\Entity\Address", * @ORM\ManyToOne(targetEntity="\Chill\MainBundle\Entity\Address",
* cascade={"persist", "remove"}) * cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=true, onDelete="SET NULL") * @ORM\JoinColumn(nullable=true, onDelete="SET NULL")
* @Groups({"read"}) * @Groups({"read", "write"})
*/ */
private $address; private $address;
@ -168,7 +170,6 @@ class ThirdParty
* @var Collection * @var Collection
* @ORM\ManyToMany(targetEntity="\Chill\MainBundle\Entity\Center") * @ORM\ManyToMany(targetEntity="\Chill\MainBundle\Entity\Center")
* @ORM\JoinTable(name="chill_3party.party_center") * @ORM\JoinTable(name="chill_3party.party_center")
* @Assert\Count(min=1)
*/ */
private $centers; private $centers;
@ -325,7 +326,7 @@ class ThirdParty
* @param array|null $type * @param array|null $type
* @return ThirdParty * @return ThirdParty
*/ */
public function setType(array $type = null) public function setTypes(array $type = null)
{ {
// remove all keys from the input data // remove all keys from the input data
$this->type = \array_values($type); $this->type = \array_values($type);
@ -338,7 +339,7 @@ class ThirdParty
* *
* @return array|null * @return array|null
*/ */
public function getType() public function getTypes()
{ {
return $this->type; return $this->type;
} }

View File

@ -63,6 +63,8 @@ class ThirdPartyVoter extends AbstractChillVoter implements ProvideRoleHierarchy
if (!$user instanceof User) { if (!$user instanceof User) {
return false; return false;
} }
return true;
$centers = $this->authorizationHelper $centers = $this->authorizationHelper
->getReachableCenters($user, new Role($attribute)); ->getReachableCenters($user, new Role($attribute));

View File

@ -8,17 +8,65 @@ servers:
- url: "/api" - url: "/api"
description: "Your current dev server" description: "Your current dev server"
components:
schemas:
Thirdparty:
type: object
properties:
id:
type: integer
readOnly: true
type:
type: string
enum:
- "thirdparty"
name:
type: string
email:
type: string
telephone:
type: string
comment:
type: string
# centers:
# type: array
# items:
# type: object
# $ref: "#/components/schemas/CenterById"
# CenterById:
# type: object
# properties:
# type:
# type: string
# enum:
# - "Center"
# id:
# type: integer
paths: paths:
/1.0/thirdparty/thirdparty.json: /1.0/thirdparty/thirdparty.json:
get: post:
tags: tags:
- thirdparty - thirdparty
summary: Return a list of all thirdparty items summary: Create a single thirdparty
requestBody:
description: "A thirdparty"
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/Thirdparty"
responses: responses:
200: 200:
description: "ok" description: "OK"
401: content:
application/json:
schema:
$ref: "#/components/schemas/Thirdparty"
403:
description: "Unauthorized" description: "Unauthorized"
422:
description: "Invalid data"
/1.0/thirdparty/thirdparty/{id}.json: /1.0/thirdparty/thirdparty/{id}.json:
get: get:
@ -41,3 +89,62 @@ paths:
description: "not found" description: "not found"
401: 401:
description: "Unauthorized" description: "Unauthorized"
patch:
tags:
- thirdparty
summary: "Alter a thirdparty"
parameters:
- name: id
in: path
required: true
description: The thirdparty's id
schema:
type: integer
format: integer
minimum: 1
requestBody:
description: "A thirdparty"
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/Thirdparty"
responses:
401:
description: "Unauthorized"
404:
description: "Not found"
200:
description: "OK"
422:
description: "Object with validation errors"
put:
tags:
- thirdparty
summary: Edit an existing thirdparty
parameters:
- name: id
in: path
required: true
description: The thirdparty's id
schema:
type: integer
format: integer
minimum: 1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/Thirdparty"
responses:
401:
description: "Unauthorized"
404:
description: "Not found"
200:
description: "OK"
422:
description: "Unprocessable entity (validation errors)"
400:
description: "Bad Request"