71 lines
2.9 KiB
Python
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}"
|