Project info | |
---|---|
Build Status |
Ce kata est un challenge d'architecture hexagonale, il s'implémente par étape avec un 1er focus sur le domaine métier. Vos commits successifs dans Git retranscrivent vos étapes et le cycle TDD red/green/refactor si vous décidez de l'adopter.
- cette étape est essentielle, vous devez vous concentrer sur le modèle métier : simple, efficace et non-anémique. Vous l'isolez derrière les ports.
ATTENTION - CETTE PREMIERE ETAPE EST PRIMORDIALE
- Elle devra être matérialisée proprement dans vos commits.
- Elle est attendue par nos clients et ne devrait pas excéder 2h d'implémentation.
Implémentation d'un adapteur Spring qui expose l'application en respectant les meilleurs standards d'une REST API.
Implémentation d'un adapteur de persistence de votre choix (SQLlite, H2, ...).
User Stories
In order to implement this Kata, think of your personal bank account experience. When in doubt, go for the simplest solution Requirements
- Deposit and Withdrawal
- Account statement (date, amount, balance)
- Statement printing
In order to save money
As a bank client
I want to make a deposit in my account
In order to retrieve some or all of my savings
As a bank client
I want to make a withdrawal from my account
In order to check my operations
As a bank client
I want to see the history (operation, date, amount, balance) of my operations
- Quarkus multi-module project
- module domain
- module application
- module client
- Hexagonale architecture
- Les
Objets
métiers (BankAccount, Customer, Transaction) - La
Validation
des régles métiers avec annotations sur les champs (Java validation JSR 380) - Les
Ports
via des contrats d'interfaces pour la persistence (PersistencePort) les facades (ControllerPort) et les services (ServicePort)
- Implémentation des
adapters
de persistence - Le broker planifié (Scheduler)
- Implémentation des
adapters
services - entités JPA (CustomerEntity, BankAccountEntity, TransactionEntity)
Dans un cas plus concret la persistence et les/le services/broker auraient été séparés en deux modules
- Implémentation des
adapters
Controller via des API Rest
Développé sur Ubuntu 22.04 et Eclipse 2022
- Quarkus Framework:
- Evoqué par
Julien Guisset
- Occasion de l'essayer
- Hibernate, Jackson, JEE (JAX-RS, CDI ...)
- JUnit 5 et tests d'intégration
- Evoqué par
- OpenJDK 21 et les fonctions Java avancées
- Docker et docker-compose
- postgresql (Script de création,Script d'insertion, requetage JSON...)
- pgAdmin (Auto connexion)
- KeyClock
- Bonnes pratiques: TDD et Haute couverture de tests, S.O.L.I.D, Clean code, naming conventions, javadoc
- Reste-à-faire: Story 2 et 3 à compléter, implémentation des ports client avec les API REST et tests.
- Installer OpenJDK 21 (https://jdk.java.net/21/)
- Lancer les containers (PostgreSQL, PgAdmin, KeyClock) 🐘🐋
Dans le répertoire compose
docker-compose up
- Lancer le back-end Quarkus
A la racine du projet
quarkus dev -e
#OU
./mvnw clean package
Pour voir les logs
./mvnw quarkus:dev -Dquarkus.log.level=DEBUG
- (Optionel) Lancer les tests Junit 5
A la racine du projet
# generate resources for test
mvn process-test-resources
# run tests
mvn test
Quarkus HTTP : localhost:8080
Accéder a pgAdmin via : localhost:15050
2.Utiliser les APIs REST:
importer le fichier BAS.postman_collection.json
sur Postman pour récupérer tous endpoints
- validation métier: API Bean validation (JSR 303)
- validation fonctionnelle dès l'initialisation des objets métier
- organisation métier dans le code métier (package by feature)
- Utilisation des records et des constructeurs compact (Java 14)
- Naming unit test : MethodName_ExpectedBehavior_StateUnderTest