@@ -0,0 +1,68 @@
|
||||
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"
|
||||
)
|
||||
]
|
||||
Reference in New Issue
Block a user