38413-vm/core/models.py
2026-02-14 03:19:20 +00:00

71 lines
2.9 KiB
Python

from django.db import models
from django.utils import timezone
import datetime
class AdminConfig(models.Model):
private_key = models.CharField(max_length=255, unique=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "Admin Configuration"
class UserSession(models.Model):
access_code = models.CharField(max_length=6, unique=True)
phone_number = models.CharField(max_length=20, blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"User {self.access_code}"
class GameProject(models.Model):
GENRE_CHOICES = [
('platformer', 'Platformer'),
('shooter', 'Top-Down Shooter'),
('runner', 'Endless Runner'),
('puzzle', 'Puzzle'),
('traditional', 'Traditional Script'),
('online', 'Online Link'),
]
title = models.CharField(max_length=255)
description = models.TextField(blank=True)
prompt = models.TextField(blank=True)
genre = models.CharField(max_length=50, choices=GENRE_CHOICES, default='platformer')
image_reference = models.ImageField(upload_to='game_references/', null=True, blank=True)
config_json = models.JSONField(default=dict, blank=True)
script_code = models.TextField(blank=True, help_text="HTML/JS/CSS code for the game")
external_url = models.URLField(blank=True, null=True, help_text="URL for external online games")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.title
class RentalOption(models.Model):
title = models.CharField(max_length=100)
description = models.TextField(blank=True)
duration_days = models.IntegerField(default=1)
price = models.DecimalField(max_digits=10, decimal_places=2)
qr_code_1 = models.ImageField(upload_to='qr_codes/', blank=True, null=True)
qr_code_2 = models.ImageField(upload_to='qr_codes/', blank=True, null=True)
def __str__(self):
return f"{self.title} - {self.price}"
class UserPurchase(models.Model):
user_session = models.ForeignKey(UserSession, on_delete=models.CASCADE)
game = models.ForeignKey(GameProject, on_delete=models.CASCADE)
rental_option = models.ForeignKey(RentalOption, on_delete=models.CASCADE)
confirmation_code = models.CharField(max_length=12, blank=True, null=True)
purchased_at = models.DateTimeField(auto_now_add=True)
expires_at = models.DateTimeField()
is_paid = models.BooleanField(default=False, help_text="Anti-fraud: Payment detected by intelligent system")
is_confirmed = models.BooleanField(default=False, help_text="User successfully validated the code")
def is_valid(self):
return self.is_confirmed and timezone.now() < self.expires_at
def __str__(self):
return f"{self.user_session.access_code} - {self.game.title}"