Files
Hulumath-Web/backend/progression/models.py
T
Jacky 1f98f7152d
CI / test (push) Failing after 1m31s
v0.2 Preview: Construction Plan.
2026-08-08 21:25:27 +08:00

69 lines
2.4 KiB
Python

from django.conf import settings
from django.db import models
class UserPet(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="pet")
name = models.CharField(max_length=40, default="小葫芦")
level = models.PositiveIntegerField(default=1)
experience = models.PositiveIntegerField(default=0)
appearance = models.JSONField(default=dict, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
class UserAbility(models.Model):
class Dimension(models.TextChoices):
VISION = "vision", "眼光"
HUMANITIES = "humanities", "人文"
DETECTION = "detection", "侦探"
MODELING = "modeling", "建模"
CONNECTION = "connection", "联结"
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="abilities")
dimension = models.CharField(max_length=20, choices=Dimension.choices)
level = models.PositiveIntegerField(default=0)
fragments = models.PositiveIntegerField(default=0)
class Meta:
constraints = [
models.UniqueConstraint(fields=("user", "dimension"), name="unique_user_ability")
]
class Card(models.Model):
slug = models.SlugField(unique=True)
name = models.CharField(max_length=80)
mathematician = models.CharField(max_length=80)
description = models.TextField()
image = models.CharField(max_length=200, blank=True)
def __str__(self):
return self.name
class UserCard(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="cards")
card = models.ForeignKey(Card, on_delete=models.PROTECT)
source = models.CharField(max_length=80)
acquired_at = models.DateTimeField(auto_now_add=True)
class Meta:
constraints = [
models.UniqueConstraint(fields=("user", "card"), name="unique_user_card")
]
class RewardTransaction(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="rewards")
idempotency_key = models.CharField(max_length=100)
source = models.CharField(max_length=80)
rewards = models.JSONField(default=dict)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
constraints = [
models.UniqueConstraint(
fields=("user", "idempotency_key"), name="unique_user_reward_transaction"
)
]