AccountNotFoundException to be thrown when not found account with id
ApiError to use in return body of exceptions
RestExceptionHandler to handler exceptions in general
TransactionRuleException to be thrown when rule exception happened
EntityLockWrapper to help handler concurrency thread
TransactionRequestVo to use for request transfer
TransactionController endpoint to handler transfer
TransactionRequestVoBuilder to help object creation in tests
TransactionControllerTest to test transfer endpoint
TransactionResourceConcurrentTest to test concurrency thread
junit-platform.properties to enabled parallel tests
Inserted @RequiredArgsConstructor lombok annotation in a AccountsController class in order to have less code
Inserted @RequiredArgsConstructor lombok annotation in a AccountsService class in order to have less code
Changed getAccount in a AccountsService to handler not found account
Changed Account class to implement EntityLockWrapper.Lockable to handler concurrency thread and added new attribute called ReentrantLock
Created new method called executeTransfer in a AccountsRepository class
Created new method called executeTransfer in a AccountsRepositoryInMemory class, to implements interface
Created new method called transfer in AccountsService to handler transfer
Created new method called sendNotification in AccountsService to call notifyAboutTransfer method
Created new method called isValueNegative in AccountsService to validate negative value
Created new method called isBalanceNotSufficient in AccountsService to validate not sufficient value
Created new method called unlockAccount in AccountsService to handler concurrency thread
Changed AccountsServiceTest to add new transfer tests
1 - Change it to use real database
2 - Create new entity called Client to associate it to Account
3 - Create endpoints to handler Client entity, maybe another microservice