Назад к задачам
Junior — Senior
3

Обзор кода в финансовом сервисе

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Вообрази, что ты старший разработчик в финтех‑компании, а младший коллега прислал тебе модуль для проверки. Тебе необходимо выполнить ревью кода.

const val receiptRestClient = ReceiptRestClient()
const val cbrRestClient = CbrRestClient()

@Service
class PaymentService {
    
    @Autowired
    private var paymentRepository: PaymentRepository? = null

    @Autowired
    private lateinit var userRepository: UserRepository

    @Transactional
    fun doPayment(
        amount: Double,
        currency: Currency,
        recipientId: Long?,
        userId: Long
    ) {
        val amountInRub: Double = amount * cbrRestClient.getRates().get(currency.getCode())

        val user: User = userRepository.findUserById(userId)!!

        val payment: Payment = Payment(amountInRub, user, recipientId)
        paymentRepository!!.save(payment)

        if (amountInRub < 1000) {
            val fee = Fee(amountInRub * 0.015, user)
            paymentRepository!!.saveFee(fee)
        }

        if (amountInRub > 1000) {
            val fee = Fee(amountInRub * 0.01, user)
            paymentRepository!!.saveFee(fee)
        }

        if (amountInRub > 5000) {
            val fee = Fee(amountInRub * 0.005, user)
            paymentRepository!!.saveFee(fee)
        }

        try {
            receiptRestClient.notify(payment)
        } catch (t: Throwable) {
            // do nothing
        }
    }
}