feat: added promocode creation and view

This commit is contained in:
ITQ
2025-01-21 18:44:45 +03:00
parent 36275caf40
commit 5ff66261c3
22 changed files with 813 additions and 56 deletions
View File
+5
View File
@@ -0,0 +1,5 @@
from django.contrib import admin
from apps.user.models import User
admin.site.register(User)
+6
View File
@@ -0,0 +1,6 @@
from django.apps import AppConfig
class UserConfig(AppConfig):
name = "apps.user"
label = "user"
@@ -0,0 +1,34 @@
# Generated by Django 5.1.5 on 2025-01-21 11:05
import django.core.validators
import django_countries.fields
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('name', models.CharField(max_length=100, validators=[django.core.validators.MinLengthValidator(1)])),
('surname', models.CharField(max_length=120, validators=[django.core.validators.MinLengthValidator(1)])),
('email', models.EmailField(max_length=120, unique=True, validators=[django.core.validators.MinLengthValidator(8)])),
('avatar_url', models.URLField(blank=True, max_length=350, null=True)),
('age', models.PositiveSmallIntegerField(validators=[django.core.validators.MaxValueValidator(100)])),
('country', django_countries.fields.CountryField(max_length=2)),
('password', models.CharField(max_length=60, validators=[django.core.validators.RegexValidator('^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$')])),
('token_version', models.BigIntegerField(default=0)),
],
options={
'abstract': False,
},
),
]
+53
View File
@@ -0,0 +1,53 @@
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",
)