feat: implement subscription management and billing enhancements
This commit is contained in:
@@ -169,7 +169,12 @@ async def proceed_to_checkout(
|
||||
amount = calculate_price(ctx)
|
||||
user = await deps.user_repository.get_user_by_id(session, cb.from_user.id)
|
||||
|
||||
if user.balance < amount:
|
||||
credit = await deps.user_service.calculate_plan_credit(
|
||||
session, cb.from_user.id, ctx, deps.rw_sdk
|
||||
)
|
||||
effective_balance = user.balance + credit
|
||||
|
||||
if effective_balance < amount:
|
||||
await cb.message.edit_text(
|
||||
INSUFFICIENT_FUNDS.format(balance=user.balance, amount=amount), reply_markup=deposit_kb
|
||||
)
|
||||
@@ -190,6 +195,15 @@ async def proceed_to_checkout(
|
||||
await cb.message.edit_text(CALLBACK_FALLBACK)
|
||||
return
|
||||
|
||||
if credit > 0:
|
||||
await deps.user_repository.increase_user_balance(
|
||||
session,
|
||||
user.id,
|
||||
credit,
|
||||
tx_type=BalanceTxType.REFUND,
|
||||
description="refund for unused subscription days",
|
||||
)
|
||||
|
||||
deducted_user = await deps.user_repository.decrease_user_balance(
|
||||
session,
|
||||
user.id,
|
||||
|
||||
Reference in New Issue
Block a user