Files
Promocode-API/solution/apps/user/models.py
T

54 lines
1.5 KiB
Python

from datetime import timedelta
import jwt
from django.conf import settings
from django.core.validators import (
MaxValueValidator,
MinLengthValidator,
RegexValidator,
)
from django.db import models
from django.utils import timezone
from django_countries.fields import CountryField
from apps.core.models import BaseModel
class User(BaseModel):
name = models.CharField(max_length=100, validators=[MinLengthValidator(1)])
surname = models.CharField(
max_length=120,
validators=[MinLengthValidator(1)],
)
email = models.EmailField(
unique=True,
max_length=120,
validators=[MinLengthValidator(8)],
)
avatar_url = models.URLField(max_length=350, blank=True, null=True)
age = models.PositiveSmallIntegerField(validators=[MaxValueValidator(100)])
country = CountryField(max_length=2)
password = models.CharField(
max_length=60,
validators=[
RegexValidator(
r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$",
),
],
)
token_version = models.BigIntegerField(default=0)
def __str__(self) -> str:
return f"{self.surname} {self.name}"
def generate_token(self) -> str:
return jwt.encode(
{
"user_id": str(self.id),
"token_version": self.token_version,
"exp": timezone.now() + timedelta(hours=24),
},
settings.SECRET_KEY,
algorithm="HS256",
)