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'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
DEBUG = True
ALLOWED_HOSTS = ['*']
@@ -79,7 +79,7 @@ ASGI_APPLICATION = 'api.asgi.application'
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
#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'
DATABASES = {

View File

@@ -145,5 +145,9 @@ def send_email(request):
sender = request.data.get('sender')
# send email
send_via_zeptomail(receiver, subject, content, sender)
return Response(status=status.HTTP_204_NO_CONTENT)
result = send_via_zeptomail(receiver, subject, content, sender)
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):
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)
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)
fullname = models.CharField(max_length=50, null=False)
display_name = models.CharField(max_length=50, null=True)
@@ -951,21 +951,21 @@ class Customer(AutoCodeModel):
code_padding = 5
code = models.CharField(max_length=20, null=True, unique=True, 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)
email = models.CharField(max_length=50, null=True, unique=True)
phone = models.CharField(max_length=20, null=True, db_index=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_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_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)
contact_address = models.CharField(max_length=200, 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)
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)
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)
deleted = models.BooleanField(null=False, default=False, db_index=True)
create_time = models.DateTimeField(null=True, auto_now_add=True)

View File

@@ -586,10 +586,10 @@ def login(request):
need_serializer = False
if values == None:
user = User.objects.filter(username=filter['username']).first()
user = User.objects.filter(email=filter['email']).first()
need_serializer = True
else:
user = User.objects.filter(username=filter['username']).values(*values).first()
user = User.objects.filter(email=filter['email']).values(*values).first()
if user == None:
return Response(None)
@@ -608,15 +608,15 @@ def login(request):
#=============================================================================
@api_view(['POST'])
def signin(request):
username = request.data['username']
email = request.data['email']
password = request.data['password']
user = User.objects.filter(username=username).first()
user = User.objects.filter(email=email).first()
if user:
result = check_password(password, user.password)
if result == False:
return Response("invalid")
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)
# invalid
return Response(status = status.HTTP_400_BAD_REQUEST)
@@ -624,15 +624,15 @@ def signin(request):
#=============================================================================
@api_view(['POST'])
def check_pin(request):
username = request.data['username']
email = request.data['email']
pin = request.data['pin']
user = User.objects.filter(username=username).first()
user = User.objects.filter(email=email).first()
if user:
result = check_password(pin, user.pin)
if result == False:
return Response("invalid")
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)
# invalid
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!