Refactor login method in POSDeviceViewSet to improve device activation logic and response messages

This commit is contained in:
2025-08-28 03:45:09 +03:30
parent 030d5f7932
commit 1cf548f487

View File

@@ -48,36 +48,50 @@ class POSDeviceViewSet(viewsets.ModelViewSet, POSDeviceMixin):
headers_data = {key: request.headers.get(key) for key in self.HEADERS} headers_data = {key: request.headers.get(key) for key in self.HEADERS}
serial = headers_data['device-serial'] serial = headers_data['device-serial']
mac = headers_data['device-mac']
sdk = headers_data['device-sdk'] sdk = headers_data['device-sdk']
psp_name = headers_data['device-provider'] psp_name = headers_data['device-provider']
# provider organization # provider organization
organization = pos_models.Organization.objects.get(en_name=psp_name) organization = pos_models.Organization.objects.get(en_name=psp_name)
# check if device exists device = self.device_queryset.filter(serial=serial).first()
if 'device_identity' in request.data.keys() and request.data['device_identity'] != "":
if not device and 'device_identity' in request.data.keys() and request.data['device_identity'] != "":
device = self.device_queryset.filter(device_identity=request.data['device_identity']).first() device = self.device_queryset.filter(device_identity=request.data['device_identity']).first()
else:
device = self.device_queryset.filter(serial=serial).first()
# activate device
if device: if device:
if (not device.is_activated or not device.pre_registered) and device.assigned_state: if not device.is_activated and device.pre_registered and device.assigned_state:
# when device is logged in, its has an organization owner client, if not it will show error # activate device
device_owner_org = self.get_device_organization()
device.is_activated = True device.is_activated = True
device.save() device.save()
session = pos_models.Sessions.objects.create( if device.is_activatedand and device.assigned_state:
device=device, # when device is logged in, its has an organization owner client, if not it will show error
password=device.password, device_owner_org = self.get_device_organization()
version=headers_data['device-version'],
mac=headers_data['device-mac'], session = self.session_queryset.filter(serial=serial).first()
ip=get_client_ip(request), if not session:
sdk=headers_data['device-sdk'], session = pos_models.Sessions.objects.create(
serial=headers_data['device-serial'], device=device,
latitude=headers_data['device-lot'], name = headers_data['device-name'],
longitude=headers_data['device-lng'], version=headers_data['device-version'],
) mac=headers_data['device-mac'],
ip=get_client_ip(request),
sdk=headers_data['device-sdk'],
serial=headers_data['device-serial'],
latitude=headers_data['device-lot'],
longitude=headers_data['device-lng'],
)
else:
session.name = headers_data['device-name']
session.version = headers_data['device-version']
session.mac = headers_data['device-mac']
session.ip = get_client_ip(request)
session.sdk = headers_data['device-sdk']
session.latitude = headers_data['device-lot']
session.longitude = headers_data['device-lng']
session.save()
org_data = { org_data = {
'id': device_owner_org.id, 'id': device_owner_org.id,
@@ -86,7 +100,7 @@ class POSDeviceViewSet(viewsets.ModelViewSet, POSDeviceMixin):
} }
return Response({ return Response({
"message": "login success - session activated", "message": "خوش آمدید",
"device_identity": device.device_identity, "device_identity": device.device_identity,
"serial": device.serial, "serial": device.serial,
"password": device.password, "password": device.password,
@@ -95,30 +109,32 @@ class POSDeviceViewSet(viewsets.ModelViewSet, POSDeviceMixin):
"device_owner": org_data, "device_owner": org_data,
"device_owner_users": get_users_of_organization(device_owner_org) "device_owner_users": get_users_of_organization(device_owner_org)
}, status=status.HTTP_200_OK) }, status=status.HTTP_200_OK)
return Response({ return Response({
"message": "device pre registered - unauthorized", "message": "دستگاه در سیستم ثبت در انتظار فعال سازی توسط پذیرنده می باشد",
"device_identity": device.device_identity, "device_identity": device.device_identity,
"password": device.password, "password": "****",
"serial": device.serial, "serial": device.serial,
"provider": organization.name, "provider": organization.name,
"provider_tell": '0214021', "provider_tell": '0214021',
}, status=status.HTTP_401_UNAUTHORIZED) }, status=status.HTTP_401_UNAUTHORIZED)
else:
pre_device = pos_models.Device.objects.create(
serial=serial,
mac=mac,
organization=organization,
pre_registered=True,
is_activated=False
)
pre_device = pos_models.Device.objects.create( return Response({
serial=serial, "message": "دستگاه در سیستم ثبت در انتظار فعال سازی توسط پذیرنده می باشد",
organization=organization, "device_identity": pre_device.device_identity,
pre_registered=True, "password": "****",
is_activated=False "provider": organization.name,
) "provider_tell": '0214021',
}, status=status.HTTP_412_PRECONDITION_FAILED)
return Response({
"message": "device pre-registered",
"device_identity": pre_device.device_identity,
"password": pre_device.password,
"provider": organization.name,
"provider_tell": '0214021',
}, status=status.HTTP_412_PRECONDITION_FAILED)
@action( @action(
methods=['post'], methods=['post'],