- Application Todo list avec archi backend/frontend moderne (frontend light) basé sur une Api rest (json)
- CRUD sur todo list (ajout de todo, suppression, update(checked/unchecked), list)
- Scheduled job toutes les 5 minutes pour purger les todos "checked"
- java/jdk d'installé (fonctionne à partir de jdk 6 (compliant 7/8))
- maven
- node (pour la partie front)
- IDE indépendant (intellij/eclipse ou autre ...)
- bower (npm install)
- Dans un terminal, aller à la racine du projet (où se trouve le pom.xml)
- Lancer la commande : bower install (pour installer les lib front)
- Lancer la commande : mvn spring-boot:run
- spring boot va monter automatiquement un tomcat embarqué, avec le déploiement automatique de l'application dessus, ainsi qu'une base de donnée en mémoire (hsqldb)
- Dans un terminal, aller à la racine du projet (où se trouve le pom.xml)
- 1a) Lancer la commande : mvn test
- 1b) Vous pouvez aussi lancer les tests à la main en allant dans les sources et en faisant "Run " dans le menu contextuel de votre IDE
- Dans un terminal, aller à la racine du projet (où se trouve le pom.xml)
- Lancer d'abord l'application avec mvn spring-boot:run
- Lancer ensuite dans un autre terminal la commande (toujours à la racine du projet) : protractor protractor-conf.js
- Deux parties du projet distingues le front du back
- src/main/java (et src/test/java) correspondent à l'appli/tests backend
- src/main/resources/static (et src/test/js) correspond à l'appli/tests frontend
- com.jperucca.springangular.config est le package de bean de configuration spring pour le back
- com.jperucca.springangular.domain est le package d'objet du domain (Todo)
- com.jperucca.springangular.repository est le package "ORM" pour les opérations CRUD en DB
- com.jperucca.springangular.web est le package de la partie "Web"(ou controller) (point d'entré des API)
- com.jperucca.springangular.web.dto est le package des objets de transfer (DTO)
- com.jperucca.springangular.web.exception est le package des exceptions fonctionnelles
- com.jperucca.springangular.web.helper est un package utilitaire sur la partie web (controller)
- src/main/resources/static/app correspond à l'application "todo" avec controller/services angular (archi light)
- Full stack spring pour avoir une application cohérente
- Spring MVC pour l'exposition d'api rest(json)
- Gestion des exceptions (ExceptionHandler) avec spring mvc
- Dozer pour le mapping de DTO <-> POJO (séparation des objets provenant de l'exterieur du backend / des objets du domain)
- Dependency Injection (DI) avec @Autowired de Spring core (IOC)
- Un cas plus réel aurait été de mettre en place une couche service entre la couche web et repository, pour cette application "light", nous pouvons nous en passer.
- Spring Data JPA utilisé par extension de l'interface CrudRepository (donne accès aux méthodes CRUD sur la DB pour les Todo)
- Annotation Hibernate/JPA sur l'entity pour l'ORM
- Builder pattern pour construction "fluent" d'un objet Todo dans l'appli et dans les tests
- maven (pour gestion des dépendences, plugin de build, possibilité de modulariser l'application)
- Spring boot (autoconfiguration permet de ne pas avoir à rajouter de configuration de tomcat, de la DB ... dans un premier temps, il va s'appuyer sur les classes présentes dans le classloader (monté grâce aux dépendances présentes dans le pom.xml), et va charger une configuration par défaut si aucune n'est trouvée)
- Spring Actuator (permet d'accéder à des metrics et monitoring features (/health, /metrics, /env, /trace, ... cf spring boot documentation)
- protractor
- Ajouter un peu plus de fonctionnel pour avoir la pertinence d'ajouter une couche service (avec aspect transactionnel de spring)
- Améliorer la partie angularjs (design applicatif pas forcément standard, à retravailler)
- Utiliser les "partial views" pour angularjs
- Utiliser ngRoute pour la définition des routes angular
- Ajouter des tests unitaires sur les controllers/services/factories d'angular
- Ajouter un profil "INT"/"PROD" sur le backend avec deux configurations pour le tomcat et DB pour switcher en fonction de l'environnement où se trouve l'application (simple argument complémentaire à ajouter à mvn spring-boot:run --spring.profiles.active=dev par exemple).
- L'implémentation du RestController peut être refactoré avec une annotation @RepositoryRestResource(collectionResourceRel = "todos", path = "todo")
- spring core, spring boot, spring starter module, spring mvc, spring data, spring profiles, spring actuator
- junit, mockito, restassured, spring test, hamcrest
- dozer, java config, guava
- angularjs, jasmine, protractor, bower
- maven
- hsqldb, embedded tomcat