# 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)