b3184fbdfe
El módulo monolítico (~3200 líneas) se convierte en un paquete cuyo __init__.py re-exporta todas las vistas, de modo que `views.X`, `from home.views import X` y la cadena 'home.views.not_found' (handler404) siguen funcionando sin tocar urls.py. Módulos por sección: _base (imports comunes + require_paid_stripe), auth, pages, account, recruit, characters, store, points, guild, history, players y payments. Cada submódulo hereda los imports con `from ._base import *`; las dependencias entre secciones se resuelven con imports explícitos (guild->auth, recruit/history->account). Se eliminan dos definiciones duplicadas que quedaban muertas al cargar: - get_character_image (primera copia, idéntica a la efectiva) - store_novawow_success_view (stub sin SOAP, pisado por la versión real) Validado con `manage.py check` (0 issues), resolución de las 100 rutas y un chequeo estático de nombres no definidos por módulo. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
90 lines
3.6 KiB
Python
90 lines
3.6 KiB
Python
from ._base import *
|
|
|
|
|
|
def promo_code_view(request):
|
|
return render(request, 'account/promo_code.html')
|
|
def transfer_d_points_view(request):
|
|
# Renderizar la plantilla para la transferencia de puntos
|
|
return render(request, 'account/transfer_d_points.html')
|
|
def vote_points_view(request):
|
|
# Verificar si el usuario tiene un `username` en la sesión
|
|
username = request.session.get('username')
|
|
if not username:
|
|
return redirect('login')
|
|
|
|
# Obtener el `account_id` basado en el `username`
|
|
with connections['acore_auth'].cursor() as cursor:
|
|
cursor.execute("SELECT id FROM account WHERE username = %s", [username])
|
|
account_data = cursor.fetchone()
|
|
|
|
if not account_data:
|
|
return JsonResponse({'success': False, 'message': 'Cuenta no encontrada.'})
|
|
|
|
account_id = account_data[0]
|
|
|
|
if request.method == 'POST':
|
|
vote_url = request.POST.get('vote').strip()
|
|
|
|
site = VoteSite.objects.filter(url=vote_url).first()
|
|
if not site:
|
|
return JsonResponse({'success': False, 'message': 'Sitio de votación no encontrado.'})
|
|
|
|
# Verificar si ya ha votado en las últimas 12 horas y 30 minutos
|
|
last_vote = VoteLog.objects.filter(account_id=account_id, vote_site=site).order_by('-created_at').first()
|
|
now = timezone.now()
|
|
if last_vote:
|
|
time_diff = now - last_vote.created_at
|
|
cooldown_period = timedelta(hours=12, minutes=30)
|
|
|
|
if time_diff < cooldown_period:
|
|
remaining_time = cooldown_period - time_diff
|
|
hours, remainder = divmod(remaining_time.seconds, 3600)
|
|
minutes, _ = divmod(remainder, 60)
|
|
return JsonResponse({
|
|
'success': False,
|
|
'message': f'<span class="red-form-response">Tienes que esperar {hours} horas y {minutes} minutos antes de volver a votar.</span>'
|
|
})
|
|
|
|
# Acreditar puntos al usuario y registrar el voto
|
|
user_points = HomeApiPoints.objects.filter(accountID=account_id).first()
|
|
if user_points:
|
|
user_points.vp += site.points
|
|
user_points.save()
|
|
else:
|
|
HomeApiPoints.objects.create(accountID=account_id, vp=site.points, dp=0)
|
|
|
|
# Registrar el voto
|
|
VoteLog.objects.create(account_id=account_id, vote_site=site, last_vote_time=now)
|
|
|
|
return JsonResponse({'success': True, 'message': f'Has votado en {site.name}. Se han acreditado {site.points} PV.'})
|
|
|
|
vote_sites = VoteSite.objects.all()
|
|
return render(request, 'account/vote_points.html', {'vote_sites': vote_sites})
|
|
def d_points_view(request):
|
|
"""
|
|
Vista para la página de D-Points.
|
|
Simplemente renderiza la plantilla d_points.html.
|
|
"""
|
|
return render(request, 'account/d_points.html')
|
|
def points_history_view(request):
|
|
return render(request, 'account/points_history.html')
|
|
def trans_history_view(request):
|
|
"""
|
|
Vista para mostrar el historial de transacciones de la cuenta y sus personajes.
|
|
"""
|
|
username = request.session.get('username') # Obtener el nombre de usuario de la sesión
|
|
|
|
if username:
|
|
# Filtramos las transacciones que corresponden al usuario y a los personajes asociados
|
|
transactions = StripeLog.objects.filter(username=username)
|
|
else:
|
|
transactions = []
|
|
|
|
# Renderizamos la vista con el historial de transacciones
|
|
return render(request, 'account/trans_history.html', {'transactions': transactions})
|
|
def trade_points_view(request):
|
|
"""
|
|
Vista para la página de intercambio de puntos.
|
|
"""
|
|
return render(request, 'account/trade_points.html')
|