import json import typing import zlib from base64 import b64decode from fastapi import status from fastapi.routing import APIRouter from fastapi.responses import JSONResponse from fastapi.requests import Request from pydantic import BaseModel internal_route = APIRouter(prefix="/internal", tags=["Internal"]) internal_route.include_router(internal_route, include_in_schema=False) class ApiReceive(BaseModel): data: str class BankReceive(BaseModel): import_file_name: str iban: str bank_date: str channel_branch: str currency: typing.Optional[str] = "TL" currency_value: float bank_balance: float additional_balance: float process_name: str process_type: str process_comment: str bank_reference_code: str @internal_route.post( path="/isbank/retreive", summary="Receive isbank xls service from mail reader service", ) def is_bank_retrieve_account_records(request: Request, bank_data: ApiReceive): from database_sql_models import AccountRecords data_dict = bank_data.model_dump() data_bulk = json.loads(zlib.decompress(b64decode(data_dict["data"]))) print("data_bulk", data_bulk) new_record_list = [] for data_keys in data_bulk: # data_bulk is a dict for data_dict in data_bulk[data_keys]: # data_bulk[data_keys] is a list data_dict["bank_balance"] = data_dict.pop("balance") data_dict["import_file_name"] = str(data_keys) print("data_dict before pyd", data_dict) data_dict = BankReceive(**data_dict).model_dump() print("data_dict after pyd", data_dict) if new_account_record := AccountRecords.find_or_create(**data_dict): print("new_account_record.is_found", new_account_record.is_found) if not new_account_record.is_found: new_record_list.append(new_account_record.get_dict()) if new_record_list: return JSONResponse( content={ "completed": True, "message": "Create Bank Record", "data": new_record_list, }, status_code=status.HTTP_200_OK, ) return JSONResponse( content={ "completed": False, "message": "Record already exist or can not be created", }, status_code=status.HTTP_406_NOT_ACCEPTABLE, )