Skip to content

etna-alternance/composer-conversation-proxy-provider

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

composer-conversation-proxy-provider

Permets aux differentes applications d'avoir un proxy vers conversation-api

GitHub version Scrutinizer Code Quality Dependency Status

Installation

Modifier composer.json :

{
    // ...
    "require": {
        "etna/conversation-proxy-provider": "~1.0.x"
    },
    "repositories": [
       {
           "type": "composer",
           "url": "http://blu-composer.herokuapp.com"
       }
   ]
}

Utilisation

Déclarer le composant

Le composant etna/config-provider met à disposition une classe permettant de faire utiliser ce proxy a notre application.

Lors de la configuration de l'application il faut donc utiliser la classe ETNA\Silex\Provider\Config\ConversationProxy :

use ETNA\Silex\Provider\Config as ETNAConf;

class EtnaConfig implements ServiceProviderInterface
{
    public function register(Application $app)
    {
        ...

        //L'utilisation du controlleur custom est expliquée plus bas
        $my_controller = new ConversationController();
        $app->register(new ETNAConf\ConversationProxy($my_controller));

        ...
    }
}

Le contenu de ce composant

Le controlleur custom

Ce provider met a disposition un DumbMethodsProxy qui fournit toutes les routes basiques de conversations :

  • Likes
  • Message
  • Views
  • Recherche

Il est possible de creer un controlleur qui hérite de ce DumbMethodsProxy pour rajouter des routes custom :

class ConversationController extends DumbMethodsProxy
{
    public function connect(Application $app)
    {
        //Si il y'a besoin des routes basiques
        $controllers = parent::connect($app);
        //Sinon
        $controllers = $app["controllers_factory"];

        $controllers->get("/contract/{contract_id}/conversation", [$this, 'getConversation']);
        $controllers->post("/contract/{contract_id}/conversation", [$this, 'createConversation']);
    }

    public function getConversation(Application $app, $contract_id)
    {
        $conversation = $app["conversations"]->findOneByQueryString("+contract_id:{$contract_id} +app-name:gsa");

        return $app->json($conversation->toArray(), 200);
    }

    public function createConversation(Application $app, $contract_id)
    {
        $conversation = new Conversation();

        $conversation->setTitle("GSA - Contract {$contract_id}");

        $response = $app["conversations"]->save($conversation);

        return $app->json($response, 201);
    }
}
Les plus de ce proxy

Ce provider met a disposition :

  • L'objet Conversation, qui est une "entité" qui se comporte comme une entité doctrine le ferait
  • On peut la remplir avec un array grace a $conversation->fromArray($array)
  • On peut la serializer en array grace a $conversation->toArray()
  • L'objet ConversationManager ($app["conversations"]) qui lui se comporte comme l'entity manager de doctrine, sauf qu'il permet aussi de recuperer des conversations. Il met a disposition les methodes :
  • findByQueryString qui prends en parametre une query string ElasticSearch (+contract_id:42 +app-name:gsa) et qui retourne un tableau de Conversations
  • findOneByQueryString qui prends aussi en parametre une query string mais retourne l'objet le plus pertinent
  • save qui prend en paramètre une Conversation et effectue les requetes necessaires pour sauvegarder les changements

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages