We have 2 types of users, regular users
and merchants
; both have a wallet with money and can transfer funds between them. Let's focus exclusively on the transfer flow between two users.
Requirements:
-
For both types of users, we need Full Name, CPF (Brazilian Individual Taxpayer Registry), email, and Password. CPF/CNPJ and emails must be unique in the system. Therefore, your system should allow only one registration with the same CPF or email address.
-
Users can send money (make transfers) to merchants and other users.
-
Merchants only receive transfers; they do not send money to anyone.
-
Validate if the user has a balance before the transfer.
-
Before completing the transfer, it should consult an external authorization service; use this mock to simulate.
-
The transfer operation should be a transaction (i.e., reversible in any case of inconsistency), and the money should return to the wallet of the user who initiated the transfer.
-
Upon receiving payment, the user or merchant needs to receive a notification (email, SMS) sent by a third-party service, and this service may occasionally be unavailable/unstable. Use this mock to simulate the sending.
-
This service should be RESTful.
- Java 17
- Maven 3.6.3 (or above)
mvn clean install
cd .\impl\
mvn spring-boot:run