diff --git a/app/webapi/routes/miniapp.py b/app/webapi/routes/miniapp.py index 136c6864..5c4d596c 100644 --- a/app/webapi/routes/miniapp.py +++ b/app/webapi/routes/miniapp.py @@ -3,13 +3,12 @@ from __future__ import annotations import logging from typing import Any, Dict, List, Optional -from sqlalchemy import select from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.ext.asyncio import AsyncSession from app.config import settings from app.database.crud.user import get_user_by_telegram_id -from app.database.models import Subscription, Transaction +from app.database.models import Subscription from app.services.subscription_service import SubscriptionService from app.utils.telegram_webapp import ( TelegramWebAppAuthError, @@ -196,32 +195,8 @@ async def get_subscription_details( traffic_limit_label=_format_limit_label(traffic_limit), lifetime_used_traffic_gb=lifetime_used, has_active_subscription=status_actual in {"active", "trial"}, - balance_kopeks=user.balance_kopeks, - balance_rubles=round((user.balance_kopeks or 0) / 100, 2), ) - transactions_result = await db.execute( - select(Transaction) - .where(Transaction.user_id == user.id) - .order_by(Transaction.created_at.desc()) - .limit(20) - ) - transactions = transactions_result.scalars().all() - - serialized_transactions = [ - { - "id": transaction.id, - "type": transaction.type, - "amount_kopeks": transaction.amount_kopeks, - "amount_rubles": round(transaction.amount_kopeks / 100, 2), - "description": transaction.description, - "is_completed": transaction.is_completed, - "created_at": transaction.created_at, - "payment_method": transaction.payment_method, - } - for transaction in transactions - ] - return MiniAppSubscriptionResponse( subscription_id=subscription.id, remnawave_short_uuid=subscription.remnawave_short_uuid, @@ -234,9 +209,5 @@ async def get_subscription_details( happ=links_payload.get("happ"), happ_link=links_payload.get("happ_link"), happ_crypto_link=links_payload.get("happ_crypto_link"), - happ_cryptolink_redirect_template=settings.get_happ_cryptolink_redirect_template(), - transactions=serialized_transactions, - balance_kopeks=user.balance_kopeks, - balance_rubles=round((user.balance_kopeks or 0) / 100, 2), ) diff --git a/app/webapi/schemas/miniapp.py b/app/webapi/schemas/miniapp.py index 911202fb..9c5a4308 100644 --- a/app/webapi/schemas/miniapp.py +++ b/app/webapi/schemas/miniapp.py @@ -29,19 +29,6 @@ class MiniAppSubscriptionUser(BaseModel): traffic_limit_label: str lifetime_used_traffic_gb: float = 0.0 has_active_subscription: bool = False - balance_kopeks: int = 0 - balance_rubles: float = 0.0 - - -class MiniAppTransaction(BaseModel): - id: int - type: str - amount_kopeks: int - amount_rubles: float - description: Optional[str] = None - is_completed: bool = True - created_at: datetime - payment_method: Optional[str] = None class MiniAppSubscriptionResponse(BaseModel): @@ -57,10 +44,4 @@ class MiniAppSubscriptionResponse(BaseModel): happ: Optional[Dict[str, Any]] = None happ_link: Optional[str] = None happ_crypto_link: Optional[str] = None - happ_cryptolink_redirect_template: Optional[str] = None - transactions: List[MiniAppTransaction] = Field(default_factory=list) - balance_kopeks: int = 0 - balance_rubles: float = 0.0 - - diff --git a/miniapp/index.html b/miniapp/index.html index 4a4dadaa..ba983c31 100644 --- a/miniapp/index.html +++ b/miniapp/index.html @@ -22,7 +22,7 @@ --tg-theme-button-color: #2481cc; --tg-theme-button-text-color: #ffffff; --tg-theme-secondary-bg-color: #f0f0f0; - + --primary: var(--tg-theme-button-color); --text-primary: var(--tg-theme-text-color); --text-secondary: var(--tg-theme-hint-color); @@ -44,25 +44,16 @@ } .container { - max-width: 520px; + max-width: 480px; margin: 0 auto; } /* Header */ .header { - display: flex; - flex-direction: column; - gap: 12px; + text-align: center; margin-bottom: 24px; } - .header-top { - display: flex; - justify-content: space-between; - align-items: flex-start; - gap: 12px; - } - .logo { font-size: 28px; font-weight: 700; @@ -75,36 +66,6 @@ color: var(--text-secondary); } - .language-selector { - display: inline-flex; - background: var(--bg-secondary); - border-radius: 999px; - padding: 4px; - gap: 4px; - } - - .lang-btn { - border: none; - background: transparent; - color: var(--text-secondary); - font-size: 13px; - font-weight: 600; - padding: 6px 12px; - border-radius: 999px; - cursor: pointer; - transition: all 0.2s ease; - } - - .lang-btn.active { - background: var(--primary); - color: #ffffff; - box-shadow: 0 2px 6px rgba(36, 129, 204, 0.35); - } - - .lang-btn:active { - transform: scale(0.96); - } - /* Loading State */ .loading { text-align: center; @@ -264,101 +225,6 @@ text-align: right; } - /* Balance */ - .balance-amount { - font-size: 28px; - font-weight: 700; - color: var(--primary); - } - - .balance-hint { - margin-top: 6px; - font-size: 13px; - color: var(--text-secondary); - } - - /* History */ - .history-list { - display: flex; - flex-direction: column; - gap: 10px; - } - - .history-item { - display: flex; - justify-content: space-between; - align-items: center; - background: white; - border-radius: 10px; - padding: 12px; - } - - .history-item__info { - display: flex; - flex-direction: column; - gap: 4px; - font-size: 13px; - } - - .history-item__title { - font-weight: 600; - color: var(--text-primary); - } - - .history-item__date { - color: var(--text-secondary); - font-size: 12px; - } - - .history-item__amount { - font-weight: 700; - font-size: 14px; - } - - .history-item__amount.positive { - color: #0f5132; - } - - .history-item__amount.negative { - color: #842029; - } - - .empty-placeholder { - font-size: 13px; - color: var(--text-secondary); - background: white; - border-radius: 10px; - padding: 16px; - text-align: center; - } - - /* Servers */ - .server-list { - display: flex; - flex-direction: column; - gap: 8px; - } - - .server-item { - background: white; - border-radius: 10px; - padding: 12px; - font-size: 13px; - display: flex; - justify-content: space-between; - align-items: center; - color: var(--text-primary); - } - - .server-item__name { - font-weight: 600; - } - - .server-item__status { - color: var(--text-secondary); - font-size: 12px; - } - /* Buttons */ .btn { width: 100%; @@ -569,29 +435,21 @@