start auth apis and packages, redis, celery and run with docker

This commit is contained in:
behruz-dev
2025-07-14 18:09:23 +05:00
parent 2040e43585
commit dd56acf978
33 changed files with 492 additions and 21 deletions

View File

@@ -0,0 +1,2 @@
from .user import *
from .verification_code import *

View File

@@ -0,0 +1,41 @@
import random, json, datetime
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.utils import timezone
from core.apps.accounts.managers.user import BaseUserManager
from core.apps.accounts.enums.user import ROLE_CHOICES
from core.apps.accounts.validators.user import phone_regex
from core.apps.accounts.models.verification_code import VerificationCode
from core.apps.shared.models.base import BaseModel
class User(BaseModel, AbstractUser):
phone = models.CharField(max_length=13, validators=[phone_regex], unique=True)
role = models.CharField(max_length=2, choices=ROLE_CHOICES)
indentification_num = models.CharField(max_length=14, null=True, blank=True)
profile_image = models.ImageField(upload_to='users/profile_image/%Y/%m/', null=True, blank=True)
objects = BaseUserManager()
username = None
USERNAME_FIELD = 'phone'
REQUIRED_FIELDS = []
def __str__(self):
return self.phone
def generate_code(self):
code = ''.join([str(random.randint(0, 100) % 10) for _ in range(4)])
expiration_time = timezone.now() + datetime.timedelta(minutes=2)
VerificationCode.objects.create(
code=code,
user=self,
expiration_time=expiration_time,
)
return code
class Meta:
verbose_name = 'user'
verbose_name_plural = 'users'
db_table = 'users'

View File

@@ -0,0 +1,18 @@
from django.db import models
from core.apps.shared.models.base import BaseModel
class VerificationCode(BaseModel):
code = models.PositiveIntegerField()
user = models.ForeignKey('User', on_delete=models.CASCADE, related_name='verification_codes')
is_expired = models.BooleanField(default=False)
is_verify = models.BooleanField(default=False)
expiration_time = models.TimeField(null=True, blank=True)
def __str__(self):
return f'{self.user.phone} - {self.code}'
class Meta:
verbose_name = 'Verification Code'
verbose_name_plural = 'Verification Codes'
db_table = 'verification_codes'