
функция (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error {
advertiser, err := r.find(advertiserID) // добавяне на транзакция
if err != nil {
return err
}
partner, err := r.find(partnerID)
if err != nil {
return err
}
advertiser.Balance -= amount // защита на SELECT FOR UPDATE
partner.Hold -= amount
partner.Balance += amount
if err := r.save(advertiser); err != nil {
return err
}
if err := r.save(partner); err != nil {
return err
}
r.totalPayouts++
return nil
}