585285640d
El módulo (~310 líneas, 30 modelos) se convierte en un paquete cuyo __init__.py re-exporta todos los modelos, de modo que `from home.models import X`, el admin y el resto de consumidores siguen funcionando igual. Módulos por sección: pricing (precios/costes de servicios + GuildRenameSettings), store (Category, Item, StripeLog, Pedido), site (contenido/config del sitio), recruit, accounts (activación, token de seguridad, LoginAttempt), voting (VoteSite, VoteLog, HomeApiPoints) e history. Las claves foráneas por clase directa quedan en el mismo módulo; cada submódulo importa solo lo que usa. Se eliminan imports de cabecera muertos (ValidationError, uuid, secrets) y las líneas de import duplicadas del original. Migración-neutral: `makemigrations home --dry-run` -> "No changes detected" (app_label=home y nombres/tablas de modelo intactos). Definición de cada modelo idéntica (extracción por AST). `manage.py check` sin incidencias. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
45 lines
2.0 KiB
Python
45 lines
2.0 KiB
Python
from django.db import models
|
|
|
|
|
|
class Category(models.Model):
|
|
name = models.CharField(max_length=100, unique=True)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class Item(models.Model):
|
|
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="items")
|
|
name = models.CharField(max_length=200)
|
|
price = models.DecimalField(max_digits=10, decimal_places=2) # Precio en euros
|
|
item_id = models.IntegerField(unique=True) # ID del ítem en el juego
|
|
image_url = models.URLField() # URL de la imagen del ítem
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class StripeLog(models.Model):
|
|
account_id = models.IntegerField() # ID de la cuenta en acore_auth
|
|
username = models.CharField(max_length=100) # Nombre de la cuenta
|
|
email = models.EmailField() # Correo electrónico
|
|
acore_ip = models.GenericIPAddressField() # IP de acore_auth
|
|
stripe_ip = models.GenericIPAddressField(blank=True, null=True) # IP detectada por Stripe
|
|
product_name = models.TextField() # Producto comprado
|
|
amount = models.DecimalField(max_digits=10, decimal_places=2) # Precio total
|
|
session_id = models.CharField(max_length=255) # ID de la sesión de Stripe
|
|
mode = models.CharField(max_length=10, choices=[("test", "Test"), ("live", "Live")]) # Modo de Stripe
|
|
character_name = models.CharField(max_length=100) # Nombre del personaje que compró
|
|
timestamp = models.DateTimeField(auto_now_add=True) # Fecha y hora
|
|
fulfilled = models.BooleanField(default=False) # Si la entrega ya se procesó (evita re-entregas)
|
|
|
|
def __str__(self):
|
|
return f"{self.username} compró {self.product_name} por {self.amount}€ ({self.mode})"
|
|
|
|
class Pedido(models.Model):
|
|
transaction_id = models.CharField(max_length=100, unique=True, null=True, blank=True)
|
|
email_cliente = models.EmailField()
|
|
estado = models.CharField(max_length=20, default="Pendiente")
|
|
monto = models.DecimalField(max_digits=10, decimal_places=2)
|
|
|
|
def __str__(self):
|
|
return f"Pedido {self.transaction_id} - {self.estado}"
|