pos device login depoyment
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
from apps.pos_device import models as pos_models
|
||||
from rest_framework import serializers
|
||||
|
||||
|
||||
class DeviceSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = pos_models.Device
|
||||
fields = '__all__'
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
from django.urls import path, include
|
||||
from rest_framework.routers import DefaultRouter
|
||||
from .viewsets.device import TestViewSet
|
||||
|
||||
router = DefaultRouter()
|
||||
router.register('test', TestViewSet, basename='test')
|
||||
|
||||
urlpatterns = [
|
||||
path('v1/', include(router.urls))
|
||||
|
||||
@@ -1,8 +1,108 @@
|
||||
from rest_framework import viewsets
|
||||
from apps.pos_device.pos.api.v1.serializers.device import DeviceSerializer
|
||||
from apps.pos_device import models as pos_models
|
||||
from rest_framework.permissions import AllowAny
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
from common.generics import get_client_ip
|
||||
from rest_framework import viewsets
|
||||
from django.db import transaction
|
||||
from rest_framework import status
|
||||
|
||||
|
||||
class TestViewSet(viewsets.ModelViewSet):
|
||||
class POSDeviceViewSet(viewsets.ModelViewSet):
|
||||
device_queryset = pos_models.Device.objects.all()
|
||||
session_queryset = pos_models.Sessions.objects.all()
|
||||
serializer_class = DeviceSerializer
|
||||
HEADERS = [
|
||||
'device-mac', 'device-serial', 'device-name',
|
||||
'device-sdk', 'device-version',
|
||||
'device-lng', 'device-lot', 'device-provider', # noqa
|
||||
'device-vname', # noqa
|
||||
]
|
||||
permission_classes = [AllowAny]
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
return Response("Hello from the outsiiiiiiiiide") # noqa
|
||||
@action(
|
||||
methods=['post'],
|
||||
detail=False,
|
||||
url_path='login',
|
||||
url_name='login',
|
||||
name='login'
|
||||
)
|
||||
@transaction.atomic
|
||||
def login(self, request):
|
||||
""" login of pos device """
|
||||
|
||||
# convert headers to dictionary
|
||||
headers_data = {key: request.headers.get(key) for key in self.HEADERS}
|
||||
|
||||
serial = headers_data['device-serial']
|
||||
sdk = headers_data['device-sdk']
|
||||
psp_name = headers_data['device-provider']
|
||||
organization = pos_models.Organization.objects.get(en_name=psp_name)
|
||||
|
||||
# check if device exists
|
||||
if 'device_identity' in request.data.keys():
|
||||
device = self.device_queryset.filter(device_identity=request.data['device_identity'])
|
||||
else:
|
||||
device = self.device_queryset.filter(serial=serial).first()
|
||||
|
||||
# activate device
|
||||
if device:
|
||||
if not device.is_activated:
|
||||
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'],
|
||||
)
|
||||
return Response({
|
||||
"message": "login success - session activated",
|
||||
"device_identity": device.device_identity,
|
||||
"serial": device.serial
|
||||
}, status=status.HTTP_200_OK)
|
||||
|
||||
pre_device = pos_models.Device.objects.create(
|
||||
serial=serial,
|
||||
sdk=sdk,
|
||||
organization=organization,
|
||||
pre_regitered=True,
|
||||
is_activated=False
|
||||
)
|
||||
|
||||
return Response({
|
||||
"message": "device pre-registered",
|
||||
"device_identity": pre_device.device_identity
|
||||
}, status=status.HTTP_200_OK)
|
||||
|
||||
@action(
|
||||
methods=['post'],
|
||||
detail=False,
|
||||
url_path='merge_devices',
|
||||
url_name='merge_devices',
|
||||
name='merge_devices'
|
||||
)
|
||||
@transaction.atomic
|
||||
def merge_devices(self, request):
|
||||
""" merge pre register device & device has registered by psp user """
|
||||
|
||||
pre_device = self.device_queryset.get(device_identity=request.data['pre_device'])
|
||||
real_device = self.device_queryset.get(device_identity=request.data['real_device'])
|
||||
|
||||
real_device.device_identity = pre_device.device_identity
|
||||
real_device.save()
|
||||
|
||||
pre_device.delete()
|
||||
|
||||
return Response({
|
||||
"message": "device merged successfully",
|
||||
"device_identity": real_device.device_identity,
|
||||
"serial": real_device.serial
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user