wag-managment-api-service-v.../service_app/routers/api/router.py

75 lines
2.3 KiB
Python

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