-- name: CreateReferralCode :one INSERT INTO referral_codes ( referral_code, referrer_id, company_id, number_of_referrals, reward_amount ) VALUES ($1, $2, $3, $4, $5) RETURNING *; -- name: CreateUserReferral :one INSERT INTO user_referrals (referred_id, referral_code_id) VALUES ($1, $2) RETURNING *; -- name: GetReferralCodeByUser :many SELECt * FROM referral_codes WHERE referrer_id = $1; -- name: GetReferralCode :one SELECT * FROM referral_codes WHERE referral_code = $1; -- name: UpdateReferralCode :exec UPDATE referral_codes SET is_active = $2, referral_code = $3, number_of_referrals = $4, reward_amount = $5, updated_at = CURRENT_TIMESTAMP WHERE id = $1; -- name: GetReferralStats :one SELECT COUNT(*) AS total_referrals, COALESCE(SUM(reward_amount), 0)::bigint AS total_reward_earned FROM user_referrals JOIN referral_codes ON referral_codes.id = referral_code_id WHERE referrer_id = $1 AND company_id = $2; -- name: GetUserReferral :one SELECT * FROM user_referrals WHERE referred_id = $1; -- name: GetUserReferralsByCode :many SELECT user_referrals.* FROM user_referrals JOIN referral_codes ON referral_codes.id = referral_code_id WHERE referral_code = $1; -- name: GetUserReferralsCount :one SELECT COUNT(*) FROM user_referrals JOIN referral_codes ON referral_codes.id = referral_code_id WHERE referrer_id = $1;