device validation by serial - DeviceException
This commit is contained in:
@@ -2,6 +2,23 @@ from rest_framework import status
|
|||||||
from rest_framework.exceptions import APIException
|
from rest_framework.exceptions import APIException
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceException(APIException):
|
||||||
|
status_code = status.HTTP_400_BAD_REQUEST
|
||||||
|
default_detail = "خطا در اطلاعات پلاک" # noqa
|
||||||
|
default_code = 'error'
|
||||||
|
|
||||||
|
def __init__(self, message=None, status_code=None, code=None):
|
||||||
|
if status_code is not None:
|
||||||
|
self.status_code = status_code
|
||||||
|
|
||||||
|
detail = {
|
||||||
|
"message": message,
|
||||||
|
"status_code": status_code
|
||||||
|
}
|
||||||
|
|
||||||
|
super().__init__(detail)
|
||||||
|
|
||||||
|
|
||||||
class DeviceAlreadyAssigned(APIException):
|
class DeviceAlreadyAssigned(APIException):
|
||||||
status_code = status.HTTP_403_FORBIDDEN
|
status_code = status.HTTP_403_FORBIDDEN
|
||||||
default_detail = "این دستگاه قبلا به این کلاینت تخصیص داده شده است" # noqa
|
default_detail = "این دستگاه قبلا به این کلاینت تخصیص داده شده است" # noqa
|
||||||
|
|||||||
18
apps/pos_device/migrations/0081_alter_device_serial.py
Normal file
18
apps/pos_device/migrations/0081_alter_device_serial.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.0 on 2026-01-26 06:47
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('pos_device', '0080_bankaccountdevicelink'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='device',
|
||||||
|
name='serial',
|
||||||
|
field=models.TextField(null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -36,7 +36,7 @@ class Device(BaseModel):
|
|||||||
acceptor = models.CharField(max_length=50, null=True)
|
acceptor = models.CharField(max_length=50, null=True)
|
||||||
terminal = models.CharField(max_length=50, null=True)
|
terminal = models.CharField(max_length=50, null=True)
|
||||||
mac = models.CharField(max_length=50, null=True)
|
mac = models.CharField(max_length=50, null=True)
|
||||||
serial = models.TextField(null=True, unique=True)
|
serial = models.TextField(null=True)
|
||||||
password = models.CharField(max_length=25, null=True)
|
password = models.CharField(max_length=25, null=True)
|
||||||
multi_device = models.BooleanField(default=False)
|
multi_device = models.BooleanField(default=False)
|
||||||
server_in = models.BooleanField(default=False)
|
server_in = models.BooleanField(default=False)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ from rest_framework.serializers import ModelSerializer
|
|||||||
from apps.authentication.api.v1.serializers.serializer import BankAccountSerializer
|
from apps.authentication.api.v1.serializers.serializer import BankAccountSerializer
|
||||||
from apps.pos_device import exceptions as pos_exceptions
|
from apps.pos_device import exceptions as pos_exceptions
|
||||||
from apps.pos_device import models as pos_models
|
from apps.pos_device import models as pos_models
|
||||||
|
from apps.pos_device.exceptions import DeviceException
|
||||||
from apps.pos_device.web.api.v1.serilaizers import client as client_serializer
|
from apps.pos_device.web.api.v1.serilaizers import client as client_serializer
|
||||||
from apps.product.web.api.v1.serializers.quota_distribution_serializers import QuotaDistributionSerializer
|
from apps.product.web.api.v1.serializers.quota_distribution_serializers import QuotaDistributionSerializer
|
||||||
|
|
||||||
@@ -18,6 +19,19 @@ class DeviceSerializer(ModelSerializer):
|
|||||||
model = pos_models.Device
|
model = pos_models.Device
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
serial = attrs['serial']
|
||||||
|
|
||||||
|
if not self.instance:
|
||||||
|
if self.Meta.model.objects.filter(serial=serial).exists():
|
||||||
|
raise DeviceException("دستگاه یا این شماره سریال از قبل ثبت شده است.", status_code=403) # noqa
|
||||||
|
|
||||||
|
if self.instance:
|
||||||
|
if serial != self.instance.serial and self.Meta.model.objects.filter(serial=serial).exists():
|
||||||
|
raise DeviceException("دستگاهی با این شماره سریال وجود دارد.", status_code=403) # noqa
|
||||||
|
|
||||||
|
return attrs
|
||||||
|
|
||||||
def to_representation(self, instance):
|
def to_representation(self, instance):
|
||||||
""" custom output of serializer """
|
""" custom output of serializer """
|
||||||
representation = super().to_representation(instance)
|
representation = super().to_representation(instance)
|
||||||
|
|||||||
Reference in New Issue
Block a user