{"id":25282859,"url":"https://github.com/paulsenon/cpe-asi2-project","last_synced_at":"2026-05-06T20:31:44.766Z","repository":{"id":39287359,"uuid":"228250669","full_name":"PaulSenon/cpe-asi2-project","owner":"PaulSenon","description":"Academic project: SOA architecture, front, API, message queue, websockets, docker","archived":false,"fork":false,"pushed_at":"2023-01-05T03:06:43.000Z","size":9942,"stargazers_count":0,"open_issues_count":27,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-12T19:52:28.151Z","etag":null,"topics":["activemq","react","soa","spring-boot","websockets"],"latest_commit_sha":null,"homepage":"","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PaulSenon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-12-15T20:52:15.000Z","updated_at":"2024-06-02T21:10:00.000Z","dependencies_parsed_at":"2023-02-03T07:45:49.596Z","dependency_job_id":null,"html_url":"https://github.com/PaulSenon/cpe-asi2-project","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PaulSenon%2Fcpe-asi2-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PaulSenon%2Fcpe-asi2-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PaulSenon%2Fcpe-asi2-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PaulSenon%2Fcpe-asi2-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PaulSenon","download_url":"https://codeload.github.com/PaulSenon/cpe-asi2-project/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247492511,"owners_count":20947544,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["activemq","react","soa","spring-boot","websockets"],"created_at":"2025-02-12T19:52:32.439Z","updated_at":"2026-05-06T20:31:39.717Z","avatar_url":"https://github.com/PaulSenon.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Description :\n\nThis project has been developed for academic purpose (engineering school : [CPE](https://www.cpe.fr/en/)) and is not meant to be reused or sold in it's current state.\nBut feel free to reuse code samples.\n\nThe purpose of this project is to learn how to design and develop an SOA architecture including :\n\n* a front app (React)\n* some REST APIs (Java Spring boot) to manage data (from a DB)\n* a comm bus (ActivMq) for intern communication\n* a realtime server (NodeJS with socket.io)\n\nThe developped app is supposed to be an online card-game.\n\nPlease mind that this project has been left in an unfinished state due to deadline.\n\n# Requirements :\n* you must install [**docker**](https://docs.docker.com/install/) (and docker-compose) on you computer\n* you must install **NodeJS** \u003e 10\n* (not mandatory, but we used **yarn**, so you might also use yarn instead of npm to avoid any problem)\n* you must have you ports **80** and **3000** available. *(for dev apps, you should also have the ports 8081 and 8161 free)*\n\n# First installation :\n* clone this repo (and move inside)\n* build the front app : `$ cd app-front \u0026\u0026 yarn build \u0026\u0026 cd ..`\n* build the docker stack : `$ docker-compose build --parallel` (will take a lot of time the first time)\n* run the stack : `$ docker-compose up` (might also take a bit of time the first time)\n\n# Commands :\n* start environment : `$ docker-compose up` (you can add -d to detach, and Ctrl+C to stop)\n* stop environment : `$ docker-compose stop`\n* stop and kill all containers/networks : `$ docker-compose down` (/!\\ will delete your database data)\n* rm environment : `$ docker-compose rm` (/!\\ like down command, but also remove stopped stuff)\n\n# Url and Entrypoints :\n\n## Main app :\n* When the project is running, you have access to your app on `localhost/login` wether in `http` or `https`. *(keep in mind that we use a self signed sertificate that our browser mught not like)*\n\n## APIs :\n* You can acces to the services REST APIs, using the port **3000** : `localhost:3000` (wether in `http` or `https`).\n\n## Tools (dev) :\n* **PhpMyAdmin** to manage the MySql database on port **8081** : `localhost:8081`\n    * **user**: `admin`\n    * **password**: `admin`\n* **ActiveMq** to manage ActiveMq server, using the port **8161** : `localhost:8161`\n    * **user**: `admin`\n    * **password**: `admin`\n\n\u003e **/!\\\\** If you try to run this project on **Windows \u003c 10 Pro**, *(using docker toolbox)* everytime It's written `localhost` here, you have to see it as your locale docker ip that is `192.168.99.100` by default. *(if it's not this IP, look at the docker terminal when it starts)*\n\n# Project structure :\n* **/app-front** : the **React** app\n* **/database** : the files needed to init the **MySql** database (for docker)\n* **/game-server** : the **NodeJS** app for the realtime server (socket.io)\n* **/log-service** : containt a **Springboot** service used to centralize log processing\n* **/monolithic** : the monolithic **Springboot** app version of the 3 services : card / user / store\n* **/reverse-proxy** : the files needed to init the **NGINX** reverse-proxy (for docker)\n* **/springboot-services** : **NOT USED** contains the **SOA** version of the **Springboot** monolith app \n* **/static-server** : the files needed to init the **NGINX** static-server (for docker) to serve the react app \n* **docker-compose.yml** is our dev docker config file\n\n# Features :\n\n## DONE :\nThis project covers the following features. Most of the time we developped only one usecase that exploit a feature, to show that we know how to do it, but it's not implemented everywhere :\n\n* Docker :\n    * Fully dockerized architecture (but not so complex, and not yet scalable)\n    * Use of env variables to setup every conf data inside our apps that can be managed all from the docker-compose file (not possible for enginx that doesn't give access to ENV in conf file)\n    * Java build dockerized\n* React app :\n    * Redux \n    * Reusable components / multiview component\n    * API calls **(comm with REST services)**\n    * Socket.io comm **(comm with NodeJS socket.io server)**\n* Node socket.io server :\n    * Socket.io\n    * Logger lib that could be shared, to build and send logs\n    * Brocker lib to handle and abstract ActiveMq connection/comm **(comm with ActiveMq to services)**\n* Log service (Springboot)\n    * Isolated service to centralize all logs\n    * Listen to messages from ActiveMQ at a specific log topic **(comm with ActiveMq)**\n    * Process incomming logs, add timestamp, and store in database **(comm with MySql)**\n* Monolith\n    * Logger lib that could be shared, to build and send logs **(comm with ActiveMq)**\n    * ... (the rest is unchanged and was already given)\n* Reverse-Proxy\n    * Route incomming request from our only entrypoint to whatever service/app that need to receive it\n    * Handle ssl (with self signed certificate)\n\n## WIP :\nHere is the list of the work we've done but has not been safe/finidhed enough to be integrated to our stack. So for these, you'll have to ckeck the code to know how we made it :\n\n* Springboot SOA :\n    * Maven project structure :\n        * common bundle, with abstract and entry point\n        * all 3 services devided in two maven project : the lib (to be required by any other service) and the service iself, that is meant to be run.\n    * ActiveMq comm between services\n        * Use DTO for request structure between services\n        * Comm between services through activeMq only\n        * Asyn workflow handled (look at store service) to save context before sending request, to be able to resume the process when response is received.\n        * Envelope inplementation to send messages between services\n\n## TODO :\nHere is the list of what we planned to do but we did not had enough time:\n\n* Springboot SOA :\n    * Handle response to REST request after having done a subrequest to another service via ActiveMq (would have required the use of Threads)\n* Docker :\n    * Be able to handle the sevice build and deploy of the Springboot SOA, with maven local dependencies (It never worked smoothly when we tested)\n* Other :\n    * Add a real user Auth (jwt, salt, hash)\n    * Finish the project :^)\n\n# Team (group n°4) :\n* Antoine PEROT\n* Clément GILLET\n* Paul SENON\n* Pierre DUCROZET\n\n# Répartition des tâches :\n* Antoine PEROT:\n    * Développement application react pour l’atelier 1\n    * Développement springboot et la transformation monolith/soa pour l’atelier 2\n    * Conception architecture et schémas\n* Clément GILLET:\n    * Création de toutes les pages de l’application en React\n    * Communication Front/Services via API REST et Socket.io\n    * Dev de tout le front\n    * Config proxy\n* Paul SENON:\n    * Développement du service de log (springboot)\n    * Intégration/configuration du proxy, du serveur static, de la DB, etc\n    * Développement serveur de jeu (NodeJS)\n    * Intégration communication node\u003c-\u003eservices via bus de comm\n    * Intégration communication node\u003c-\u003eclient via sockets\n    * Dockerisation de tout l’architecture\n    * Un peu de pair programming en Java pour l'achi SOA (com inter services) \n* Pierre DUCROZET:\n    * Travail sur la gestion des dépendances maven\n    * Développement Springboot\n    * Travail sur l'utilisation du bus de comm depuis Java\n    * Mise en place activeMQ\n    * Transformation monolithic/soa\n\n# Demo\nHere is a link to the video demo of this project: [https://youtu.be/9SaggiNb9ag](https://youtu.be/9SaggiNb9ag)\n\n# Repository\nHere is the link to the public github of this project : [https://github.com/PaulSenon/cpe-asi2-project](https://github.com/PaulSenon/cpe-asi2-project)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaulsenon%2Fcpe-asi2-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaulsenon%2Fcpe-asi2-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaulsenon%2Fcpe-asi2-project/lists"}