Sobes.tech
Назад к задачам
Junior — Senior
188

Корректное списание средств с пользовательского баланса

Компании, где спрашивали:
Lamoda Tech

Условие задачи

livecode

В системе есть таблица user, где хранится текущий остаток средств каждого пользователя. Представлена функция на псевдокоде, реализующая процесс снятия суммы с баланса. Необходимо проанализировать её, выявить проблемные места и предложить улучшения, учитывая, что код работает в продакшене. Особое внимание следует уделить вопросам конкурентного доступа, атомарности операций, использованию транзакций и возможным гонкам данных (race conditions).

func withdrawBalance(userID int32, amount float32) {
    balance = exec('select balance from user u where u.id=$1', userID)
    if balance - amount >= 0.0 {
        exec('update user u set balance=balance-$1', amount)
        return exec('select balance from user u where u.id=$1', userID)
    }
}