Commit ce6ef4a9 authored by Thibaut Vallee's avatar Thibaut Vallee
Browse files

paremtres en temps que JSON

parent 6200a58f
Loading
Loading
Loading
Loading
+26 −1
Changes for doc/modele.md: 26 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ A noter que les 5 états précédents servent dans des constantes. Une sécurit
Les types d'événements permettent de décrire des actions a traiter par événement. Pour chaque action automatique, il faut définir un événement type avec :
- son code : identifiant textuel unique
- son libelle et une description
- des parametres éventuels : par exemple { "mail-to" } signifiera que l'événement de type test attendrons éventuellement un paramétre de destinataire de mail.
- des parametres éventuels : par exemple { "mail-to" : "adresse@destinataire.fr" } signifiera que l'événement de type test attendrons éventuellement un paramétre de destinataire de mail.
- Récursion : non réimplémenté pour le moment

Pour chaque nouveau type d'événement, il est important de définir un Handler pour implémenter le traitement des événements de ce type. (cf [configuration.md](configuration.md) > Handlers)
@@ -40,6 +40,31 @@ Chaque événement se caractérise par :
- un parent éventuelle (pour les collections d'événements)
- une liste de mots clefs (pour de la recherche)

## Gestions des paramétres

Les parmétres sont considéré comme un champ texte libre que l'on peut utiliser comme on le souhaite.

Cependant, afin de facilité leurs usages, ils peuvent être définie en temps qu'objet JSON.
Coté EvenementType, il faut les considérer comme un modéle de couple <"clé", "Exemple de valeur attendu">
Coté Evenement, <"clé", "valeur">

Un ensemble de fonctions sont pré-définis pour les manipulés en temps qu'objet JSON.
```
public function hasParametre(string $key): bool;
public function getParametre(string $key):  string|array|null;
public function setParametre(string $key, string|array|null $value): static;
public function addParametre(string $key, string|array $value): static;
public function removeParametre(string $key): static;
```

Si un événement (ou un type) est instancié avec des paramètres non convertibles en JSON, ces fonctions ne modifie pas les données et/ou retourne false/null.
Il faut alors utiliser les accesseurs classique pour lire/écrire et interprété les paramètres.

!!! dans les méthodes POST et PATCH des événements, il n'y a pas de contôle sur le fait que les événements sont aux formats JSON.
(amélioration futur).

_Note : si théoriquement, les valeurs peuvent être des tableaux, cette option n'as pas encore été testé_

## Gestions des logs

Chaque instance d'événements dispose d'un champs $logs.
+2 −29
Changes for src/Entity/AbstractEvenement.php: 2 added lines, 29 removed lines.
Original line number Diff line number Diff line
@@ -207,36 +207,9 @@ abstract class AbstractEvenement implements EvenementInterface
     */
    #[Groups(['evenement:read','evenement:create', 'evenement:update'])]
    #[ORM\Column(length: 1024)]
    protected ?string $parametres = null;
    protected ?string $parametres;
    use EvenementParamatresTrait;

    public function getParametres(): ?string
    {
        return $this->parametres;
    }

    public function setParametres(?string $parametres): static
    {
        $this->parametres = $parametres;
        return $this;
    }

    public function getParametre(string $key): string|array|null
    {
        if(!isset($this->parametres) || $this->parametres == ""){return null;}
        $data = json_decode($this->parametres, false);
        return  ($data->$key) ?? null;
    }

    public function setParametre(string $key, string|array|null $value): static
    {
        if(!isset($this->parametres)){
            $this->parametres="{}";
        }
        $data = json_decode($this->parametres, false);
        $data->$key = $value;
        $this->parametres = json_encode($data);
        return $this;
    }

    #[Groups(['evenement:read', 'evenement:traiter'])]
    #[ORM\Column(type: Types::TEXT)]
+4 −11
Changes for src/Entity/AbstractEvenementType.php: 4 added lines, 11 removed lines.
Original line number Diff line number Diff line
@@ -77,20 +77,13 @@ abstract class AbstractEvenementType implements TypeInterface
        return $this;
    }

    /**
     * @var string|null  $parametres
     */
    #[Groups(['evenement-type:read','evenement-type:create', 'evenement-type:update'])]
    #[ORM\Column(length: 1024)]
    protected ?string $parametres;

    public function getParametres(): ?string
    {
        return $this->parametres;
    }

    public function setParametres(?string $parametres): static
    {
        $this->parametres = $parametres;
        return $this;
    }
    use EvenementParamatresTrait;

    #[Groups(['evenement-type:read','evenement-type:create', 'evenement-type:update'])]
    #[ORM\Column(length: 64)]
+70 −0
Changes for src/Entity/EvenementParamatresTrait.php: 70 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php
namespace Unicaen\Evenement\Entity;

/**
 * Gestions des paramétres autant coté Evenement que EvenementType
 * @desc Par défaut, les paramètres sont considéré comme une chaîne de caractère basique
 * possibilité de les considérer comme des objets JSON
 */
trait EvenementParamatresTrait
{
    protected ?string $parametres;
    public function getParametres(): ?string
    {
        return $this->parametres;
    }

    public function setParametres(?string $parametres): static
    {
        $this->parametres = $parametres;
        return $this;
    }

    /**
     * @desc les fonctions si dessous repose sur le fait que les paramétres sont aux format json
     * si ce n'est pas le cas, ces fonctions ne modifient pas les paramètres ou retourne false/null
     */

    public function hasParametre(string $key): bool
    {
        if(!isset($this->parametres) || $this->parametres == ""){return false;}
        if (!json_validate($this->parametres)) { return false;}
        $data = json_decode($this->parametres, true);
        return  isset($data[$key]);
    }

    public function getParametre(string $key):  string|array|null
    {
        if(!$this->hasParametre($key)){return null;}
        $data = json_decode($this->parametres, true);
        return  $data[$key];
    }

    public function setParametre(string $key, string|array|null $value): static
    {
        if(!isset($this->parametres)){
            $this->parametres="[]";
        }
        if (json_validate($this->parametres)) {
            $data = json_decode($this->parametres, true);
            if($value == null && $this->hasParametre($key)){
                unset($data[$key]);
            }
            elseif($value != null){
                $data[$key] = $value;
            }
            $this->parametres = json_encode($data);
        }
        return $this;
    }

    public function addParametre(string $key, string|array $value): static
    {
        return $this->setParametre($key, $value);
    }
    public function removeParametre(string $key): static
    {
        return $this->setParametre($key, null);
    }

}
+3 −1
Changes for src/Model/EvenementInterface.php: 3 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -36,12 +36,14 @@ interface EvenementInterface

    public function getParametres(): ?string;
    public function setParametres(?string $parametres): static;
    public function hasParametre(string $key): bool;
    public function getParametre(string $key):  string|array|null;
    public function setParametre(string $key, string|array|null $value): static;
    public function addParametre(string $key, string|array $value): static;
    public function removeParametre(string $key): static;

    public function getLog(): ?string;
    public function setLog(?string $log): static;
    //Pour ajouter une ligne aux logs
    public function addLog(?string $log): static;
    public function getLastLog(): ?string;

Loading