initial commit
This commit is contained in:
3
core/apps/accounts/models/__init__.py
Normal file
3
core/apps/accounts/models/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# isort: skip_file
|
||||
from .user import * # noqa
|
||||
from .reset_token import * # noqa
|
||||
15
core/apps/accounts/models/reset_token.py
Normal file
15
core/apps/accounts/models/reset_token.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.db import models
|
||||
from django_core.models import AbstractBaseModel
|
||||
|
||||
|
||||
class ResetToken(AbstractBaseModel):
|
||||
token = models.CharField(max_length=255, unique=True)
|
||||
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
|
||||
|
||||
def __str__(self):
|
||||
return self.token
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Reset Token"
|
||||
verbose_name_plural = "Reset Tokens"
|
||||
133
core/apps/accounts/models/user.py
Normal file
133
core/apps/accounts/models/user.py
Normal file
@@ -0,0 +1,133 @@
|
||||
import uuid
|
||||
|
||||
from django.contrib.auth import models as auth_models
|
||||
from django.db import models
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.core.validators import RegexValidator
|
||||
|
||||
from ..choices import RoleChoice
|
||||
from ..managers import UserManager
|
||||
|
||||
|
||||
phone_validator = RegexValidator(
|
||||
regex=r'^\+?[1-9]\d{1,14}$',
|
||||
message=_(
|
||||
"Enter a valid international phone number "
|
||||
"(E.164 format, e.g., +14155552671)."
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class User(auth_models.AbstractUser):
|
||||
id = models.UUIDField(
|
||||
_("ID"),
|
||||
primary_key=True,
|
||||
default=uuid.uuid4,
|
||||
editable=False
|
||||
)
|
||||
|
||||
phone = models.CharField(
|
||||
max_length=255,
|
||||
validators=[
|
||||
phone_validator
|
||||
],
|
||||
unique=True
|
||||
)
|
||||
username = models.CharField(
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True
|
||||
)
|
||||
validated_at = models.DateTimeField(
|
||||
null=True,
|
||||
blank=True
|
||||
)
|
||||
inn_code = models.CharField(
|
||||
max_length=12,
|
||||
null=True,
|
||||
blank=True
|
||||
)
|
||||
first_name = models.CharField(
|
||||
_("First Name"),
|
||||
max_length=150,
|
||||
blank=False,
|
||||
null=False,
|
||||
)
|
||||
last_name = models.CharField(
|
||||
_("Last Name"),
|
||||
max_length=150,
|
||||
blank=False,
|
||||
null=False
|
||||
)
|
||||
email = models.EmailField(
|
||||
_("Email Address"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
role = models.CharField(
|
||||
_("Role"),
|
||||
max_length=255,
|
||||
choices=RoleChoice,
|
||||
default=RoleChoice.USER,
|
||||
)
|
||||
|
||||
created_at = models.DateTimeField(
|
||||
verbose_name=_("Created At"),
|
||||
auto_now_add=True
|
||||
)
|
||||
|
||||
updated_at = models.DateTimeField(
|
||||
verbose_name=_("Updated At"),
|
||||
auto_now=True
|
||||
)
|
||||
|
||||
USERNAME_FIELD = "phone"
|
||||
|
||||
REQUIRED_FIELDS = [
|
||||
"first_name",
|
||||
"last_name",
|
||||
*auth_models.AbstractUser.REQUIRED_FIELDS
|
||||
]
|
||||
objects = UserManager() # type: ignore
|
||||
|
||||
def save(self, *args: object, **kwargs: object):
|
||||
"""
|
||||
save method overwriten to make self.role updated
|
||||
every time when user is made admin or superuser
|
||||
"""
|
||||
if self.is_staff:
|
||||
self.role = RoleChoice.ADMIN
|
||||
if self.is_superuser:
|
||||
self.role = RoleChoice.SUPERUSER
|
||||
else:
|
||||
self.role = RoleChoice.USER
|
||||
|
||||
super().save(*args, **kwargs) # type: ignore
|
||||
|
||||
def __str__(self):
|
||||
return self.phone
|
||||
|
||||
@property
|
||||
def full_name(self) -> str:
|
||||
return f"{self.first_name} {self.last_name}"
|
||||
|
||||
class Meta:
|
||||
db_table = "users"
|
||||
verbose_name = _("User")
|
||||
verbose_name_plural = _("Users")
|
||||
|
||||
indexes = [
|
||||
models.Index(
|
||||
fields=["phone"],
|
||||
name="users_phone_inx"
|
||||
),
|
||||
models.Index(
|
||||
fields=["email"],
|
||||
name="users_email_inx",
|
||||
),
|
||||
models.Index(
|
||||
fields=["inn_code"],
|
||||
name="users_inn_code_inx"
|
||||
)
|
||||
]
|
||||
Reference in New Issue
Block a user