
func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error {
advertiser, err := r.find(totalPayouts) // ტრანზაქცია დამატება
თუ err != nil {
დაბრუნება err
}
პარტნიორი, err := r.find(partnerID)
თუ err != nil {
დაბრუნება err
}
რეკლამა, ბალანსი -= თანხა
პარტნიორი.Hold -= თანხა
პარტნიორი.Бalance += თანხა
თუ შეცდომა := r.save(რეკლამა); შეცდომა != null {
დაბრუნება შეცდომა
}
თუ შეცდომა := r.save(პარტნიორი); შეცდომა != null {
დაბრუნება შეცდომა
}
r.totalPayouts++
დაბრუნება null
}
ფუნქცია (r *PayoutRepository) find(id string) (Partner, შეცდომა) {
p := Partner{}
შეცდომა := r.db.QueryRow("SELECT * FROM partners WHERE id = " + id).Scan(&p) // $1 დამატება
თუ შეცდომა != null {
თუ შეცდომა == sql.ErrNoRows {
დაბრუნება p, errors.New("პარტნიორი ვერ მოიძებნა")
}
დაბრუნება p, შეცდომა
}
დაბრუნება p, null
}