====== Projet de services Web 2015 ====== ===== Déroulement ===== Le projet est à réaliser par groupes de 4 à 5 personnes. On créera un projet forge pour le rendu. Tous les étudiants du groupe doivent saisir l'identifiant du projet dans tomuss, dans la case ''PRJ_F'' de l'UE TIW5: Services Web. On incluera au dépôt Mercurial un script bash ''lancement.sh'' qui démarrera les différents serveurs (sauf servicemix) via maven. Le script effectuera également les déploiement servicemix par copie de fichier dans des répertoires indiqués par les variables d'environnement ''$SMIX_DEPLOY''. **Le projet est à rendre pour le 31 janvier 2016** ===== Description ===== On souhaite développer une application de commande de repas à livrer. L'application se présente sous la forme d'un site Web offrant un choix de restaurants et permettant une recherche par quartier/ville((pour simplifier, une ville est assimilée à un quartier)). L'affichage d'un restaurant est enrichi d'informations issues de [[http://dbpedia.org/sparql|DBPedia]] lorqu'une IRI est disponible. ==== Commande ==== Un client peut passer une commande pour un ensemble de repas. Pour cela il constitue un panier puis le valide. Il est alors redirigé vers une interface de paiement. Une fois le paiement confirmé, il reçoit un e-mail de confirmation de la commande. Le restaurant prépare la commande et met à jour son statut via une interface Web dédiée. Le livreur effectue ensuite la livraison et signale que la livraison a été effectuée sur son terminal (qui sera simulé par une interface Web). Le restaurant est alors payé (voir flux financier ci-dessous). ==== Traitement des commandes dans un restaurant et des commandes à livrer ==== Un restaurateur dispose d'une interface Web (mentionnée ci-dessus) listant l'ensemble des commandes qui le concerne. Cette interface permet de changer le statut d'une commande vers ''EN_PREPARATION'' ou vers ''PRETE''. De la même manière, un livreur dispose d'un terminal listant les commandes qu'il doit livrer et permettant de confirmer leur livraison (en passant le statut d'une livraison à ''LIVREE''). ==== Flux financier ==== Afin de confirmer sa commande, le client saisit ses informations bancaires (numéro de carte et cryptogramme) via une redirection sur le "site" de rapidbank.com. Ce dernier contacte mabanque.com qui effectue le débit si possible. En cas de problème, rapidbank.com affiche un message d'erreur. Sinon rapidbank.com invoque un URL prédéfinie du service paiement. Le compte bancaire du site de réservation est alors crédité du montant indiqué (pour simplifier, on utilisera l'opération ''debit'' avec un montant négatif). Une fois la livraison confirmée, un transfert bancaire est effectué depuis le compte du site de restauration vers le compte du restaurant. Le site de réservation prend 3% du montant de la commande au titre de la gestion. Toujours à des fins de simplification, on suppose que les clients, les restaurants et le site de réservation ont tous leur comptes hébergés chez mabanque.com. ===== Travail demandé ===== * Faire une interface Web, de type //single page application// (sauf pour la partie paiement qui est externalisée), pour le site de commandes de repas. En particulier, la constitution du panier se fera intégralement côté client. * Faire une interface Web, de type //single page application// pour les restaurants et une autre pour les livreurs. * Implémenter un service de gestion des commandes qui sera utilisé en interne du processus pour traiter l'évolution des commandes (évolution du statut). On déplacera l'opération ''livraison'' vers ce service * Implémenter le processus métier lui-même (i.e. les interactions possible entre les services et les déclenchements de messages). Les échanges de message et le processus métier devront être implémenté dans servicemix. Aucun serveur ne devra contacter aucun autre serveur directement, (hors servicemix qui assure le lien entre les services). ===== Utilitaires ===== ==== Serveur de mail ==== [[http://www.icegreen.com/greenmail/|GreenMail]] peut-être utilisé pour simuler un serveur de mail en local si vous ne voulez pas utiliser votre propre compte mail. Il dispose de facilités pour tester les envois/réceptions de mail. ==== Services fournis ==== Les services et interfaces web de //rapidbank.com// et //mabanque.com// sont fournis dans {{:enseignement:sw:projet:services-fournis.zip|}} Cette archive contient des projets maven et peuvent être construits via ''mvn install'' à la racine de l'archive. === MaBanque.com === Le site de //mabanque.com// est simulé par un serveur qui démarre sur ''localhost:8082''. Il peut être démarré via ''java -jar mabanque.com/target/mabanque.com-2015.0-jar-with-dependencies.jar''((-help pour les options)). * Il fourni une interface web http://localhost:8082/admin qui permet de gérer les comptes hébergés * Il fourni un service web destiné à être utilisé par //rapidbank.com// et permettant de débiter le compte d'un client * Il conserve ses données en mémoire. Ces données peuvent être sauvée dans un fichier ''mabanque.xml'' et être ainsi rechargées au prochain démarrage. === RapidBank.com === Le site //rapidbank.com// est simulé par un serveur qui démarre sur ''localhost:8083''. Il peut être démarré via ''java -jar rapidbank.com/target/rapidbank.com-2015.0-jar-with-dependencies.jar''((-help pour les options)). * Il fourni une interface de saisie d'un numéro de carte et d'un cryptogramme http://localhost:8083/?cmdid=cmd-32&valeur=3.5 * cmdid est le numéro d'une commande * valeur est le montant de la transaction * En cas de réussite de la transaction, le service ''Paiement'' est invoqué (par défaut à l'emplacement http://localhost:8081/services/paiement). * Le WSDL de ce service est disponible dans le zip fourni: ''rapidbank.com/src/main/resources/Paiement.wsdl'' === PaiementMockup === L'application //PaiementMockup// permet de mettre en place un faux service ''Paiement'' qui affiche simplment une ligne de log lors de la réception d'un paiement. Elle peut être démarrée via ''java -jar paiement-mockup/target/paiement-mockup-2015.0-jar-with-dependencies.jar'' Il est possible de tester ces 3 services en les lançant tous, puis en se connectant sur les deux interfaces utilisateur http://localhost:8082/admin et http://localhost:8083/?cmdid=cmd-32&valeur=3.5 ===== Remarques ===== * Le service ''locService'' a été étendu: * une nouvelle opération ''getQuartiers'' a été ajoutée * la description des restaurants inclut maintenant une IRI DBPedia.