77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
|
|
# views/scan_views.py
|
||
|
|
from rest_framework.views import APIView
|
||
|
|
from ..api_client import APIClient
|
||
|
|
from ..constants import API_URLS
|
||
|
|
|
||
|
|
|
||
|
|
class BaseScanView(APIView):
|
||
|
|
"""Базовый класс для сканирования"""
|
||
|
|
client = APIClient()
|
||
|
|
response_handler = APIClient.create_response
|
||
|
|
|
||
|
|
def validate_code(self, code):
|
||
|
|
if not code:
|
||
|
|
return self.response_handler(
|
||
|
|
"Error",
|
||
|
|
"Code not found",
|
||
|
|
status_code=400
|
||
|
|
)
|
||
|
|
return None
|
||
|
|
|
||
|
|
|
||
|
|
class StorageScanView(BaseScanView):
|
||
|
|
"""Сканирование кодов хранилища"""
|
||
|
|
|
||
|
|
def post(self, request):
|
||
|
|
raw_code = request.data.get("code")
|
||
|
|
if error := self.validate_code(raw_code):
|
||
|
|
return error
|
||
|
|
|
||
|
|
formatted_code = raw_code.replace("\u001d", chr(29))
|
||
|
|
token = self.client.get_token(API_URLS["LOGIN"])
|
||
|
|
|
||
|
|
if not token:
|
||
|
|
return self.response_handler(
|
||
|
|
"Error",
|
||
|
|
"Failed to get token",
|
||
|
|
status_code=500
|
||
|
|
)
|
||
|
|
|
||
|
|
response_data = self.client.make_request(
|
||
|
|
API_URLS["STORAGE_INFO"],
|
||
|
|
token,
|
||
|
|
{"IdentificationCode": formatted_code}
|
||
|
|
)
|
||
|
|
|
||
|
|
if response_data and response_data.get("Value"):
|
||
|
|
return self.response_handler("OK", data=response_data)
|
||
|
|
return self.response_handler("Error", "Data not found", status_code=404)
|
||
|
|
|
||
|
|
|
||
|
|
class AspuScanView(BaseScanView):
|
||
|
|
"""Сканирование ASPU кодов"""
|
||
|
|
|
||
|
|
def post(self, request):
|
||
|
|
raw_code = request.data.get("code")
|
||
|
|
if error := self.validate_code(raw_code):
|
||
|
|
return error
|
||
|
|
|
||
|
|
formatted_code = raw_code.replace("\x1d", "\\u001d")
|
||
|
|
token = self.client.get_token(API_URLS["LOGIN_ASPU"])
|
||
|
|
|
||
|
|
if not token:
|
||
|
|
return self.response_handler(
|
||
|
|
"Error",
|
||
|
|
"Failed to get token",
|
||
|
|
status_code=500
|
||
|
|
)
|
||
|
|
|
||
|
|
response_data = self.client.make_request(
|
||
|
|
API_URLS["ASPU_CODE_INFO"],
|
||
|
|
token,
|
||
|
|
{"code": formatted_code}
|
||
|
|
)
|
||
|
|
|
||
|
|
if response_data and response_data.get("Value"):
|
||
|
|
return self.response_handler("OK", data=response_data)
|
||
|
|
return self.response_handler("Error", "Data not found", status_code=404)
|