This commit is contained in:
anhduy-tech
2026-03-24 15:51:04 +07:00
parent c00b79f7c4
commit 6a669e1b0e
13 changed files with 119 additions and 19 deletions

View File

@@ -21,7 +21,7 @@ BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'django-insecure-_u202k$8qq2p*cr_eo(7k!0ngr5^n)27@85+5oy8&41(u6&j54' SECRET_KEY = 'django-insecure-_u202k$8qq2p*cr_eo(7k!0ngr5^n)27@85+5oy8&41(u6&j54'
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False DEBUG = True
ALLOWED_HOSTS = ['*'] ALLOWED_HOSTS = ['*']
@@ -79,7 +79,7 @@ ASGI_APPLICATION = 'api.asgi.application'
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases # https://docs.djangoproject.com/en/4.1/ref/settings/#databases
#prod:5.223.52.193 dev:5.223.42.146 #prod:5.223.52.193 dev:5.223.42.146
MODE = 'prod' MODE = 'dev'
DBHOST = '138.199.203.34' if MODE == 'prod' else '138.199.203.34' DBHOST = '138.199.203.34' if MODE == 'prod' else '138.199.203.34'
DATABASES = { DATABASES = {

View File

@@ -145,5 +145,9 @@ def send_email(request):
sender = request.data.get('sender') sender = request.data.get('sender')
# send email # send email
send_via_zeptomail(receiver, subject, content, sender) result = send_via_zeptomail(receiver, subject, content, sender)
return Response(status=status.HTTP_204_NO_CONTENT)
if result:
return Response({'message': 'Send success'}, status=200)
else:
return Response({'message': 'Send failed'}, status=500)

View File

@@ -0,0 +1,23 @@
# Generated by Django 5.1.7 on 2026-03-24 06:45
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0003_delete_news'),
]
operations = [
migrations.AlterField(
model_name='user',
name='email',
field=models.CharField(max_length=100, unique=True),
),
migrations.AlterField(
model_name='user',
name='username',
field=models.CharField(max_length=50, null=True, unique=True),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.1.7 on 2026-03-24 06:45
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0004_alter_user_email_alter_user_username'),
]
operations = [
migrations.AlterField(
model_name='user',
name='username',
field=models.CharField(max_length=50, null=True),
),
]

View File

@@ -0,0 +1,35 @@
# Generated by Django 5.1.7 on 2026-03-24 06:59
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0005_alter_user_username'),
]
operations = [
migrations.AlterField(
model_name='customer',
name='country',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='app.country'),
),
migrations.AlterField(
model_name='customer',
name='creator',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='app.user'),
),
migrations.AlterField(
model_name='customer',
name='email',
field=models.CharField(default=1, max_length=50, unique=True),
preserve_default=False,
),
migrations.AlterField(
model_name='customer',
name='phone',
field=models.CharField(db_index=True, max_length=20, null=True),
),
]

View File

@@ -0,0 +1,19 @@
# Generated by Django 5.1.7 on 2026-03-24 07:05
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0006_alter_customer_country_alter_customer_creator_and_more'),
]
operations = [
migrations.AlterField(
model_name='customer',
name='type',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='app.customer_type'),
),
]

View File

@@ -157,9 +157,9 @@ class Discount_Type(models.Model):
class User(models.Model): class User(models.Model):
username = models.CharField(max_length=50, null=False, unique=True) username = models.CharField(max_length=50, null=True)
password = models.CharField(max_length=100, null=False) password = models.CharField(max_length=100, null=False)
email = models.CharField(max_length=100, null=True, unique=True) email = models.CharField(max_length=100, null=False, unique=True)
avatar = models.CharField(max_length=100, null=True) avatar = models.CharField(max_length=100, null=True)
fullname = models.CharField(max_length=50, null=False) fullname = models.CharField(max_length=50, null=False)
display_name = models.CharField(max_length=50, null=True) display_name = models.CharField(max_length=50, null=True)
@@ -951,21 +951,21 @@ class Customer(AutoCodeModel):
code_padding = 5 code_padding = 5
code = models.CharField(max_length=20, null=True, unique=True, db_index=True) code = models.CharField(max_length=20, null=True, unique=True, db_index=True)
fullname = models.CharField(max_length=200, null=False, db_index=True) fullname = models.CharField(max_length=200, null=False, db_index=True)
phone = models.CharField(max_length=20, null=False, unique=True, db_index=True) phone = models.CharField(max_length=20, null=True, db_index=True)
email = models.CharField(max_length=50, null=True, unique=True) email = models.CharField(max_length=50, null=False, unique=True)
legal_type = models.ForeignKey(Legal_Type, null=True, related_name='+', on_delete=models.PROTECT) legal_type = models.ForeignKey(Legal_Type, null=True, related_name='+', on_delete=models.PROTECT)
legal_code = models.CharField(max_length=20, null=True, unique=True) legal_code = models.CharField(max_length=20, null=True, unique=True)
issued_place = models.ForeignKey(Issued_Place, null=True, related_name='+', on_delete=models.PROTECT) issued_place = models.ForeignKey(Issued_Place, null=True, related_name='+', on_delete=models.PROTECT)
issued_date = models.DateField(null=True) issued_date = models.DateField(null=True)
country = models.ForeignKey(Country, null=False, related_name='+', on_delete=models.PROTECT) country = models.ForeignKey(Country, null=True, related_name='+', on_delete=models.PROTECT)
address = models.CharField(max_length=200, null=True) address = models.CharField(max_length=200, null=True)
contact_address = models.CharField(max_length=200, null=True) contact_address = models.CharField(max_length=200, null=True)
note = models.TextField(null=True) note = models.TextField(null=True)
type = models.ForeignKey(Customer_Type, null=False, related_name='+', on_delete=models.PROTECT) type = models.ForeignKey(Customer_Type, null=True, related_name='+', on_delete=models.PROTECT)
segment = models.ForeignKey(Customer_Segment, null=True, related_name='+', on_delete=models.PROTECT) segment = models.ForeignKey(Customer_Segment, null=True, related_name='+', on_delete=models.PROTECT)
user = models.OneToOneField(User, null=True, related_name='customer_profile', on_delete=models.SET_NULL) user = models.OneToOneField(User, null=True, related_name='customer_profile', on_delete=models.SET_NULL)
sale_staff = models.ForeignKey('Staff', null=True, related_name='+', on_delete=models.PROTECT) sale_staff = models.ForeignKey('Staff', null=True, related_name='+', on_delete=models.PROTECT)
creator = models.ForeignKey(User, null=False, related_name='+', on_delete=models.PROTECT) creator = models.ForeignKey(User, null=True, related_name='+', on_delete=models.PROTECT)
updater = models.ForeignKey(User, null=True, related_name='+', on_delete=models.PROTECT) updater = models.ForeignKey(User, null=True, related_name='+', on_delete=models.PROTECT)
deleted = models.BooleanField(null=False, default=False, db_index=True) deleted = models.BooleanField(null=False, default=False, db_index=True)
create_time = models.DateTimeField(null=True, auto_now_add=True) create_time = models.DateTimeField(null=True, auto_now_add=True)

View File

@@ -586,10 +586,10 @@ def login(request):
need_serializer = False need_serializer = False
if values == None: if values == None:
user = User.objects.filter(username=filter['username']).first() user = User.objects.filter(email=filter['email']).first()
need_serializer = True need_serializer = True
else: else:
user = User.objects.filter(username=filter['username']).values(*values).first() user = User.objects.filter(email=filter['email']).values(*values).first()
if user == None: if user == None:
return Response(None) return Response(None)
@@ -608,15 +608,15 @@ def login(request):
#============================================================================= #=============================================================================
@api_view(['POST']) @api_view(['POST'])
def signin(request): def signin(request):
username = request.data['username'] email = request.data['email']
password = request.data['password'] password = request.data['password']
user = User.objects.filter(username=username).first() user = User.objects.filter(email=email).first()
if user: if user:
result = check_password(password, user.password) result = check_password(password, user.password)
if result == False: if result == False:
return Response("invalid") return Response("invalid")
else: else:
info = User.objects.filter(pk=user.id).values('id','username','avatar','fullname','auth_status','auth_status__code','auth_status__name').first() info = User.objects.filter(pk=user.id).values('id','email','username','avatar','fullname','auth_status','auth_status__code','auth_status__name').first()
return Response(info) return Response(info)
# invalid # invalid
return Response(status = status.HTTP_400_BAD_REQUEST) return Response(status = status.HTTP_400_BAD_REQUEST)
@@ -624,15 +624,15 @@ def signin(request):
#============================================================================= #=============================================================================
@api_view(['POST']) @api_view(['POST'])
def check_pin(request): def check_pin(request):
username = request.data['username'] email = request.data['email']
pin = request.data['pin'] pin = request.data['pin']
user = User.objects.filter(username=username).first() user = User.objects.filter(email=email).first()
if user: if user:
result = check_password(pin, user.pin) result = check_password(pin, user.pin)
if result == False: if result == False:
return Response("invalid") return Response("invalid")
else: else:
info = User.objects.filter(pk=user.id).values('id','username','avatar','fullname','auth_status','auth_status__code','auth_status__name').first() info = User.objects.filter(pk=user.id).values('id','email','username','avatar','fullname','auth_status','auth_status__code','auth_status__name').first()
return Response(info) return Response(info)
# invalid # invalid
return Response(status = status.HTTP_400_BAD_REQUEST) return Response(status = status.HTTP_400_BAD_REQUEST)

View File

@@ -14,3 +14,4 @@ Check out the dashboard at http://127.0.0.1:4200
Server stopped!