McDuck/users/models.py

112 lines
4.7 KiB
Python
Raw Normal View History

2024-08-29 09:21:58 +00:00
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import gettext_lazy as _
from django.utils import timezone
from django.db.models.signals import post_save
from django.dispatch import receiver
# Users model
class User(AbstractUser):
photo = models.ImageField('Аватарка пользователя', upload_to='static/media/user_photo/')
tg_id = models.CharField('Telegram ID', max_length=250, blank=True)
tg_username = models.CharField('Имя пользователя', max_length=250, blank=True)
name = models.CharField('Имя', max_length=300, blank=True)
referral_code = models.CharField('Код рефферала', max_length=250, unique=True, blank=True, null=True)
referred_by = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, related_name='referrals')
coins_for_referral = models.BigIntegerField("Монеты полученные от рефералов", default=0, blank=True)
def __str__(self):
return self.tg_username
# Уровни пользователя
class Levels(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField('Имя',max_length=300, blank=True)
level = models.IntegerField("Уровень")
photo = models.ImageField('Фото уровня', upload_to='static/media/levels/')
need_coins = models.IntegerField("Количество нужных монет")
def __str__(self):
return f"Пользователь {self.user.username} - {self.name} {self.level}"
class Meta:
verbose_name = 'Уровень'
verbose_name_plural = 'Уровни'
#Баланс пользователя
class Balance(models.Model):
class ColorEnum(models.TextChoices):
YELLOW = 'Yl', _('Yellow')
BLACK = 'BK', _('Black')
GREY = 'GR', _('Grey')
BLUE = 'BL', _('Blue')
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField("Имя баланса")
wallet = models.CharField('Кошелек', max_length=350, blank=True, null=True)
currency = models.CharField('Валюта', max_length=250, blank=True)
balance = models.BigIntegerField("Количество монет/Сумма", default=0)
color = models.CharField('Цвет', choices=ColorEnum.choices, default=ColorEnum.YELLOW, max_length=250)
def __str__(self):
return f"Сумма {self.balance} {self.currency} - {self.user.username}"
class Meta:
verbose_name = 'Баланс пользователя'
verbose_name_plural = 'Балансы пользователей'
# Ежедневная награда
class DailyReward(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
day = models.IntegerField("День")
reward_amount = models.IntegerField("Сумма награды")
claimed = models.BooleanField('Была ли награда получена',default=False)
claim_date = models.DateTimeField('Время получения награды',null=True, blank=True)
def __str__(self):
return f"День {self.day} - {self.user.username}"
class Meta:
verbose_name = 'Ежедневная награда'
verbose_name_plural = 'Ежедневные награды'
# Список ежедневных наград
class DailyRewardsList(models.Model):
class MonthEnum(models.TextChoices):
TO28 = 'До 28', _('До 28')
TO29 = 'До 29', _('До 29')
TO30 = 'До 30', _('До 30')
TO31 = 'До 31', _('До 31')
active_day = models.IntegerField('Активный день', blank=True)
month_max_day = models.CharField('Длительность месяца', choices=MonthEnum.choices, max_length=250)
def __str__(self):
return f"Месяц с {self.month_max_day} днями - Активный день: {self.active_day}"
class Meta:
verbose_name = 'Список наград'
verbose_name_plural = 'Список наград'
from django.db import models
class Transaction(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
amount = models.DecimalField("Сумма", max_digits=10, decimal_places=2)
currency = models.CharField("Валюта", max_length=10)
status = models.CharField("Статус", max_length=50, default="Pending")
transaction_id = models.CharField("ID транзакции", max_length=100, unique=True)
created_at = models.DateTimeField("Дата создания", auto_now_add=True)
def __str__(self):
return f"Транзакция {self.transaction_id} пользователя {self.user.username}"