backend/scan/viewss1/scan_views.py
2025-03-23 21:24:08 +10:00

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)