
func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error {
advertiser, err := r.find(totalPayouts) // транзакция кошуу
эгер err != нөл{
кайтаруу err
}
партнер, err := r.find(partnerID)
эгер err != нөл{
кайтаруу err
}
рекламодател, Баланса -= сумма
партнер.Hold -= сумма
партнер.Баланса += сумма
эгер err := r.save(рекламодател); err != нөл{
кайтаруу err
}
эгер err := r.save(партнер); err != нөл{
кайтаруу err
}
r.totalPayouts++
кайтаруу нөл{
}
функция (r *PayoutRepository) find(id string) (Partner, error) {
p := Partner{}
err := r.db.QueryRow("SELECT * FROM partners WHERE id = " + id).Scan(&p) // $1 кошуу
эгер err != нөл{
эгер err == sql.ErrNoRows {
кайтаруу p, errors.New("партнер табылган жок")
}
кайтаруу p, err
}
кайтаруу p, nil
}