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
|
||||
|
||||
|
||||
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):
|
||||
status_code = status.HTTP_403_FORBIDDEN
|
||||
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)
|
||||
terminal = 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)
|
||||
multi_device = 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.pos_device import exceptions as pos_exceptions
|
||||
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.product.web.api.v1.serializers.quota_distribution_serializers import QuotaDistributionSerializer
|
||||
|
||||
@@ -18,6 +19,19 @@ class DeviceSerializer(ModelSerializer):
|
||||
model = pos_models.Device
|
||||
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):
|
||||
""" custom output of serializer """
|
||||
representation = super().to_representation(instance)
|
||||
|
||||
Reference in New Issue
Block a user