initial
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from accounts.manager import UserManager
|
||||
from django.contrib.auth.models import BaseUserManager
|
||||
from django.utils.text import slugify
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils import timezone
|
||||
import uuid
|
||||
|
||||
class User(AbstractUser):
|
||||
class Role(models.TextChoices):
|
||||
Admin = 'Admin',"Admin"
|
||||
Editor = 'Editor',"Editor"
|
||||
is_verified = models.BooleanField(default=False , verbose_name='Is Verified')
|
||||
role = models.CharField(max_length=255, verbose_name='Role' , choices=Role.choices, blank=True, null=True)
|
||||
created = models.DateField(auto_now_add=True)
|
||||
base_role = Role.Admin
|
||||
|
||||
objects = UserManager()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.pk and not self.role:
|
||||
self.role = self.base_role
|
||||
return super().save(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
return self.username
|
||||
|
||||
# manager
|
||||
class CustomerUserManager(BaseUserManager):
|
||||
def get_queryset(self ,*args, **kwargs) :
|
||||
reasult = super().get_queryset(*args, **kwargs)
|
||||
return reasult.filter(role=User.Role.Editor)
|
||||
|
||||
|
||||
def create_user(self, email, password=None, **extra_fields):
|
||||
if not email :
|
||||
raise ValueError('Users must have an email address')
|
||||
email = self.normalize_email(email)
|
||||
user = self.model(email=email,**extra_fields)
|
||||
user.set_password(password)
|
||||
user.save()
|
||||
return user
|
||||
|
||||
|
||||
# User Profile
|
||||
class UserProfile(models.Model):
|
||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||
profile_picture = models.ImageField(upload_to='user_pictures/', blank=True, null=True)
|
||||
name = models.CharField(max_length=255, blank=True, null=True)
|
||||
slug = models.SlugField(max_length=255, blank=True, null=True)
|
||||
email = models.EmailField(max_length=255, blank=True, null=True)
|
||||
phone = models.CharField(max_length=255, blank=True, null=True)
|
||||
address = models.CharField(max_length=255, blank=True, null=True)
|
||||
city = models.CharField(max_length=255, blank=True, null=True)
|
||||
state = models.CharField(max_length=255, blank=True, null=True)
|
||||
country = models.CharField(max_length=255, blank=True, null=True)
|
||||
zipcode = models.CharField(max_length=255, blank=True, null=True)
|
||||
facebook = models.CharField(max_length=500, blank=True, null=True)
|
||||
instagram = models.CharField(max_length=500, blank=True, null=True)
|
||||
linkedin = models.CharField(max_length=500, blank=True, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.pk:
|
||||
original_profile = UserProfile.objects.get(pk=self.pk)
|
||||
if original_profile.user.email != self.email:
|
||||
# Email has changed, update it in the associated User model
|
||||
original_profile.user.email = self.email
|
||||
original_profile.user.save()
|
||||
|
||||
self.slug = slugify(self.user.username)
|
||||
super(UserProfile, self).save(*args, **kwargs)
|
||||
|
||||
def getUserImage(self):
|
||||
image_url = ""
|
||||
if self.profile_picture:
|
||||
image_url = self.profile_picture.url
|
||||
else:
|
||||
image_url = "https://cdn-icons-png.flaticon.com/128/3135/3135715.png"
|
||||
return image_url
|
||||
|
||||
def __str__(self):
|
||||
return self.user.username
|
||||
|
||||
# Password reset token generate
|
||||
class PasswordResetToken(models.Model):
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
token = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
expiration_time = models.DateTimeField()
|
||||
|
||||
def __str__(self):
|
||||
return str(self.token)
|
||||
|
||||
def is_expired(self):
|
||||
now = timezone.now()
|
||||
return now > self.expiration_time
|
||||
# Signals
|
||||
@receiver(post_save, sender=User)
|
||||
def create_user_profile(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
UserProfile.objects.create(
|
||||
user=instance,
|
||||
email=instance.email,
|
||||
name=instance.username,
|
||||
slug=slugify(instance.username),
|
||||
)
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def save_user_profile(sender, instance, **kwargs):
|
||||
instance.userprofile.save()
|
||||
|
||||
# signals for User
|
||||
@receiver(post_save, sender=User)
|
||||
def create_customer_profile(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
UserProfile.objects.get_or_create(user=instance)
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def save_customer_profile(sender, instance, **kwargs):
|
||||
if hasattr(instance, 'userprofile'):
|
||||
instance.userprofile.save()
|
||||
Reference in New Issue
Block a user