#230 Code Review of a Payment Processing Service
Perform a code review:
package review;
@Service
public class PaymentService {
@Autowired
private PaymentRepository paymentRepository;
@Autowired
private FeeRepository feeRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private NotificationRestClient notificationRestClient;
@Autowired
private CbrRestClient cbrRestClient;
@Transactional
public void processPayment(double amount, Currency currency, long recipientId) {
double amountInRub = amount * cbrRestClient.doRequest().getRates().get(currency.getCode());
Long userId = (Long) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
User user = userRepository.findUserById(userId);
Payment payment = new Payment(amountInRub, user, recipientId);
paymentRepository.save(payment);
if (amountInRub < 1000) {
Fee fee = new Fee(amountInRub * 0.015, user);
feeRepository.save(fee);
}
if (amountInRub > 1000) {
Fee fee = new Fee(amountInRub * 0.01, user);
feeRepository.save(fee);
}
if (amountInRub > 5000) {
Fee fee = new Fee(amountInRub * 0.005, user);
feeRepository.save(fee);
}
try {
notificationRestClient.notify(payment);
} catch (Exception e) {
// do nothing
}
}
}
Question review
Sign in to start the dialogue
The mentor keeps the context of the current question and your previous messages.
Sign in
Available with Premium
This is just one of the solutions available with Premium. And more:
- 250+ advanced lectures
- 1300+ practice exercises
- 500+ solutions to problems from real interviews
- Personalized Java Hub certificates
- Expanded access to the AI mentor