From 1cf548f487d6d31acc708248d4baa537b503f619 Mon Sep 17 00:00:00 2001 From: Mohammad Kiani Date: Thu, 28 Aug 2025 03:45:09 +0330 Subject: [PATCH] Refactor login method in POSDeviceViewSet to improve device activation logic and response messages --- apps/pos_device/pos/api/v1/viewsets/device.py | 92 +++++++++++-------- 1 file changed, 54 insertions(+), 38 deletions(-) diff --git a/apps/pos_device/pos/api/v1/viewsets/device.py b/apps/pos_device/pos/api/v1/viewsets/device.py index dece585..c0b0a64 100644 --- a/apps/pos_device/pos/api/v1/viewsets/device.py +++ b/apps/pos_device/pos/api/v1/viewsets/device.py @@ -48,36 +48,50 @@ class POSDeviceViewSet(viewsets.ModelViewSet, POSDeviceMixin): headers_data = {key: request.headers.get(key) for key in self.HEADERS} serial = headers_data['device-serial'] + mac = headers_data['device-mac'] sdk = headers_data['device-sdk'] psp_name = headers_data['device-provider'] + # provider organization organization = pos_models.Organization.objects.get(en_name=psp_name) - # check if device exists - if 'device_identity' in request.data.keys() and request.data['device_identity'] != "": + device = self.device_queryset.filter(serial=serial).first() + + 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() - else: - device = self.device_queryset.filter(serial=serial).first() - - # activate device + if device: - if (not device.is_activated or not device.pre_registered) and device.assigned_state: - # when device is logged in, its has an organization owner client, if not it will show error - device_owner_org = self.get_device_organization() + if not device.is_activated and device.pre_registered and device.assigned_state: + # activate device device.is_activated = True device.save() - session = pos_models.Sessions.objects.create( - device=device, - password=device.password, - 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'], - ) + if device.is_activatedand and device.assigned_state: + # when device is logged in, its has an organization owner client, if not it will show error + device_owner_org = self.get_device_organization() + + session = self.session_queryset.filter(serial=serial).first() + if not session: + session = pos_models.Sessions.objects.create( + device=device, + name = headers_data['device-name'], + 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 = { 'id': device_owner_org.id, @@ -86,7 +100,7 @@ class POSDeviceViewSet(viewsets.ModelViewSet, POSDeviceMixin): } return Response({ - "message": "login success - session activated", + "message": "خوش آمدید", "device_identity": device.device_identity, "serial": device.serial, "password": device.password, @@ -95,30 +109,32 @@ class POSDeviceViewSet(viewsets.ModelViewSet, POSDeviceMixin): "device_owner": org_data, "device_owner_users": get_users_of_organization(device_owner_org) }, status=status.HTTP_200_OK) - + return Response({ - "message": "device pre registered - unauthorized", + "message": "دستگاه در سیستم ثبت در انتظار فعال سازی توسط پذیرنده می باشد", "device_identity": device.device_identity, - "password": device.password, + "password": "****", "serial": device.serial, "provider": organization.name, "provider_tell": '0214021', }, 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( - serial=serial, - organization=organization, - pre_registered=True, - is_activated=False - ) - - 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) + return Response({ + "message": "دستگاه در سیستم ثبت در انتظار فعال سازی توسط پذیرنده می باشد", + "device_identity": pre_device.device_identity, + "password": "****", + "provider": organization.name, + "provider_tell": '0214021', + }, status=status.HTTP_412_PRECONDITION_FAILED) @action( methods=['post'],