First Commit

This commit is contained in:
mrtoine 2025-09-12 11:11:44 +02:00
commit ce0758fbbb
496 changed files with 52062 additions and 0 deletions

87
users/models.py Executable file
View file

@ -0,0 +1,87 @@
from django.contrib.auth.models import AbstractUser, Group, Permission
from django.db import models
from shop.models import Item
def user_avatar_path(instance, filename):
return f'avatars/{instance.id}/{filename}'
class User(AbstractUser):
avatar = models.ImageField(upload_to=user_avatar_path, default='avatars/default.gif')
email = models.EmailField(unique=False)
biography = models.TextField(default='Pas de bio')
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=150, blank=True)
birth_date = models.DateField(null=True, blank=True)
active = models.BooleanField(default=False)
theme = models.CharField(max_length=50, default='default')
border_avatar = models.CharField(max_length=50, blank=True, null=True)
username_decoration = models.CharField(max_length=50, blank=True, null=True)
groups = models.ManyToManyField(
Group,
related_name='customuser_set', # Ajoutez un related_name unique
blank=True,
help_text='The groups this user belongs to.',
verbose_name='groups',
)
user_permissions = models.ManyToManyField(
Permission,
related_name='customuser_permissions_set', # Ajoutez un related_name unique
blank=True,
help_text='Specific permissions for this user.',
verbose_name='user permissions',
)
@property
def level(self):
return self.levels.first()
@property
def experience(self):
return self.levels.get(user=self).experience
@property
def inventory(self):
return self.inventory.all()
@property
def money(self):
return self.inventory.get(item__name='Or').quantity
def __str__(self):
return self.username
class Meta:
verbose_name = 'Utilisateur'
verbose_name_plural = 'Utilisateurs'
ordering = ['username']
class VisitorStats(models.Model):
total_visitors = models.PositiveIntegerField(default=0)
last_reset = models.DateTimeField(auto_now=True)
class UserLevel(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='levels')
level = models.PositiveIntegerField(default=1)
experience = models.PositiveIntegerField(default=0)
def __str__(self):
return self.level
class Meta:
verbose_name = 'Niveau utilisateur'
verbose_name_plural = 'Niveaux utilisateurs'
ordering = ['level']
class UserInventory(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='inventory')
item = models.ForeignKey(Item, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(default=1)
def __str__(self):
return self.item.name
class Meta:
verbose_name = 'Inventaire utilisateur'
verbose_name_plural = 'Inventaires utilisateurs'
ordering = ['item']