Private
Public Access
forked from FOSS/AutoShop-Djimbo-Simple
feat(referral): add referral system with withdrawals
This commit is contained in:
@@ -90,7 +90,7 @@ class Refillx(BaseRepository[RefillModel, Refill]):
|
||||
user_result = await session.execute(
|
||||
text(
|
||||
"""
|
||||
SELECT user_balance, user_refill
|
||||
SELECT user_balance, user_refill, user_referrer_id
|
||||
FROM storage_users
|
||||
WHERE user_id = :user_id
|
||||
"""
|
||||
@@ -103,6 +103,14 @@ class Refillx(BaseRepository[RefillModel, Refill]):
|
||||
await session.rollback()
|
||||
return "USER_NOT_FOUND"
|
||||
|
||||
settings_result = await session.execute(
|
||||
text(
|
||||
"SELECT status_referral, referral_refill_percent "
|
||||
"FROM storage_settings WHERE id = 1"
|
||||
)
|
||||
)
|
||||
get_settings = settings_result.mappings().first()
|
||||
|
||||
new_balance = round(float(get_user["user_balance"]) + float(pay_amount), 2)
|
||||
new_refill = round(float(get_user["user_refill"]) + float(pay_amount), 2)
|
||||
|
||||
@@ -138,6 +146,66 @@ class Refillx(BaseRepository[RefillModel, Refill]):
|
||||
),
|
||||
{"balance": new_balance, "refill": new_refill, "user_id": user_id},
|
||||
)
|
||||
|
||||
referrer_id = get_user["user_referrer_id"]
|
||||
referral_reward = 0.0
|
||||
|
||||
if (
|
||||
get_settings is not None
|
||||
and get_settings["status_referral"] == "True"
|
||||
and referrer_id is not None
|
||||
and referrer_id != user_id
|
||||
):
|
||||
referral_reward = round(
|
||||
float(pay_amount)
|
||||
* float(get_settings["referral_refill_percent"])
|
||||
/ 100,
|
||||
2,
|
||||
)
|
||||
|
||||
if referral_reward > 0:
|
||||
referrer_result = await session.execute(
|
||||
text(
|
||||
"SELECT user_referral_balance FROM storage_users "
|
||||
"WHERE user_id = :user_id"
|
||||
),
|
||||
{"user_id": referrer_id},
|
||||
)
|
||||
get_referrer = referrer_result.mappings().first()
|
||||
|
||||
if get_referrer is not None:
|
||||
source_id = f"refill:{pay_comment or pay_receipt}"
|
||||
|
||||
await session.execute(
|
||||
text(
|
||||
"UPDATE storage_users "
|
||||
"SET user_referral_balance = :balance "
|
||||
"WHERE user_id = :user_id"
|
||||
),
|
||||
{
|
||||
"balance": round(
|
||||
float(get_referrer["user_referral_balance"])
|
||||
+ referral_reward,
|
||||
2,
|
||||
),
|
||||
"user_id": referrer_id,
|
||||
},
|
||||
)
|
||||
await session.execute(
|
||||
text(
|
||||
"INSERT INTO storage_referral_transactions "
|
||||
"(user_id, related_user_id, transaction_type, source_id, amount, transaction_unix) "
|
||||
"VALUES (:user_id, :related_user_id, :transaction_type, :source_id, :amount, :transaction_unix)"
|
||||
),
|
||||
{
|
||||
"user_id": referrer_id,
|
||||
"related_user_id": user_id,
|
||||
"transaction_type": "refill_percent",
|
||||
"source_id": source_id,
|
||||
"amount": referral_reward,
|
||||
"transaction_unix": get_unix(),
|
||||
},
|
||||
)
|
||||
await session.commit()
|
||||
except Exception:
|
||||
await session.rollback()
|
||||
|
||||
Reference in New Issue
Block a user