đŠ Take-Home Test â Bank Account Implementation (Java & React) âš Aperçu
Ce projet implémente un compte bancaire simple respectant les contraintes du test.
Back-End : Java 17 + Spring Boot
Front-End : React + Vite
Lâobjectif est de permettre la gestion des transactions bancaires (dĂ©pĂŽt, retrait) avec Event Sourcing et Repository Pattern, tout en offrant une interface simple pour visualiser le solde et lâhistorique.
đŻ Objectifs du test
Implémenter un compte bancaire avec dépÎt, retrait et consultation de transactions.
Assurer la traçabilitĂ© et lâhistorique des transactions (Event Sourcing).
Fournir un front-end minimal pour visualiser le solde et lâhistorique.
Séparer les responsabilités lecture/écriture (CQRS) pour un design moderne et scalable.
đ Back-End â Java 17 Choix technologiques Technologie Raison Java 17 StabilitĂ© et fonctionnalitĂ©s modernes (records, pattern matching, sealed classes) Spring Boot 3.x CrĂ©ation rapide dâAPI REST et injection de dĂ©pendances JUnit 5 Tests unitaires modernes et fiables Maven Gestion de dĂ©pendances et build standardisĂ© Architecture & Design
Domain Model :
Transaction : record immuable encapsulant date, type, montant et solde aprĂšs transaction.
BankAccountImpl : logique métier du compte.
StatementPrinter : génération des états de compte (console ou extension possible).
Event Sourcing :
Les transactions sont la source de vĂ©ritĂ© : le solde est dĂ©rivĂ© de lâhistorique des transactions.
Repository Pattern :
TransactionRepository abstrait la persistence, permettant un stockage interchangeable (mémoire, base de données, etc.).
CQRS (Command Query Responsibility Segregation) :
CommandHandler pour les opĂ©rations dâĂ©criture (dĂ©pĂŽt/retrait)
QueryHandler pour les opérations de lecture (solde/transactions)
Injection de dépendances :
DateProvider : rend les tests unitaires déterministes.
TransactionRepository : permet dâisoler la persistence pour les tests.
Exceptions métier dédiées :
AmountExceedsLimitException, InvalidAmountException, InsufficientFundsException
Fournissent des messages clairs pour le front-end et améliorent la traçabilité.
Encapsulation :
La liste des transactions est interne et non exposée directement.
Validations centralisées via méthodes privées.
Limitations & pistes dâamĂ©lioration :
Pas de support multi-devises ni frais bancaires.
Pas de gestion multi-comptes ou authentification.
StatementPrinter pourrait retourner une String plutĂŽt que dâafficher sur la console.
đ API REST â Spring Boot MĂ©thode URL Description GET /api/transactions RĂ©cupĂšre toutes les transactions GET /api/balance RĂ©cupĂšre le solde actuel POST /api/deposit DĂ©pose un montant POST /api/withdraw Retire un montant
Gestion des erreurs :
Les exceptions métier sont traduites en messages clairs.
Exemple : AmountExceedsLimitException â « Le montant dĂ©passe la limite maximale de 1 000 000 par opĂ©ration. »
CORS :
Autorisation pour le front React (http://localhost:5173) via configuration Spring Boot.
đ» Front-End â React avec Vite Choix technologiques Technologie Usage React Composants rĂ©utilisables et gestion efficace de lâĂ©tat TypeScript Typage statique pour plus de robustesse Axios RequĂȘtes HTTP vers le back-end Vite Build rapide et simple pour le dĂ©veloppement Architecture
Composant unique BankAccount :
Saisie de montant
DépÎt / retrait
Affichage du solde
Tableau des transactions
Transactions triées par date décroissante
Gestion des erreurs et succÚs via useState. Appels API centralisés dans fetchData() et addTransaction().
⥠Installation & exécution Prérequis
JDK 17+
Maven 3.8+
Node.js 18+
npm ou yarn
Back-End
cd backend mvn test mvn clean compile mvn spring-boot:run
API disponible : http://localhost:8080/api
Front-End
cd frontend npm install npm run dev
Interface disponible : http://localhost:5174
đ§Ș Tests Back-End
Tests unitaires JUnit 5 pour toutes les opérations (dépÎt, retrait).
Validation des exceptions et isolation via InMemoryTransactionRepository pour lâEvent Sourcing.
Front-End
Tests manuels pour valider lâinteraction avec lâAPI.
đ OpenAPI / Swagger
Documentation via springdoc-openapi
Permet :
Documentation API claire
Tests simplifiés via Swagger UI
Collaboration facile avec front-end et mobile
Swagger UI : http://localhost:8080/swagger-ui.html
đ Event Sourcing, Repository & CQRS
Event Sourcing : toutes les opérations sont des transactions immuables.
Repository Pattern : TransactionRepository abstrait la persistence.
CQRS : séparation lecture/écriture via CommandHandler et QueryHandler.
Tests injectent InMemoryTransactionRepository pour simuler le stockage et garantir lâisolation.
â Conclusion
Le projet démontre :
MaĂźtrise de Java 17 et Spring Boot
Conception solide : séparation des responsabilités, encapsulation, validations centralisées
Event Sourcing appliqué : solde dérivé des transactions
Repository Pattern pour abstraction de la persistence
CQRS pour séparer lecture et écriture
Front-End React + TypeScript intégré et fonctionnel
Gestion claire des erreurs et contraintes métier
đ JâespĂšre avoir passĂ© mon test !