urban-investment-research/Utils/RecordUtils.py

104 lines
3.9 KiB
Python
Raw Normal View History

2023-03-20 14:11:37 +08:00
from Mods.EditRecord.Crud import add_record
from Utils.MiddlewareUtils import format_request
from starlette.concurrency import iterate_in_threadpool
from fastapi import Request
from Context.common import auth_util, common_db
import json
from Utils.PrintUtils import print_error
from enum import Enum
class RecordTypeId(Enum):
CompanyBaseInfo = 1
CompanyControl = 2
CompanyEquityPenetration = 3
CompanyIndexMain = 4
CompanyPlusProperty = 5
CompanyShareholder = 6
CompanyBond = 7
CompanyCredit = 8
CompanyCreditRating = 9
CompanyGuarantee = 10
CompanyJudicialCase = 11
CompanyMainBusiness = 12
def get_update_data(before_data: dict, after_data: dict):
"""
获取数据变化信息
"""
update_data_before = {}
update_data_after = {}
for key, before_value in before_data.items():
if key in after_data:
after_value = after_data[key]
if before_value != after_value:
update_data_before[key] = before_value
update_data_after[key] = after_value
return update_data_before, update_data_after
async def record_middleware(req: Request, call_next):
"""
编辑记录的中间件
"""
class RecordTemp:
need_record = False
req_data = None
action = None
item_name = None
req_url_split = req.url.path.split("/")
if len(req_url_split) > 1 and req_url_split[-1] in ['delete', 'update', 'add']:
convert_str = "".join([item[0].upper() + item[1:] for item in req_url_split[-2].split("_")])
if convert_str in RecordTypeId._member_names_:
RecordTemp.need_record = True
RecordTemp.req_data = await format_request(req)
RecordTemp.item_name = convert_str
RecordTemp.action = req_url_split[-1]
res = await call_next(req)
try:
if RecordTemp.need_record:
if res.status_code == 200:
token_data = auth_util.token_data_depend(req.headers.get("Authorization"))
db = common_db.get_db_i()
try:
item_id = None
if RecordTemp.action == "add":
res_body = [chunk async for chunk in res.body_iterator]
res.body_iterator = iterate_in_threadpool(iter(res_body))
res_data = json.loads(res_body[0])
if "id" in res_data:
item_id = res_data["id"]
if "company_id" in res_data:
item_id = res_data["company_id"]
else:
if "id" in RecordTemp.req_data.data:
item_id = RecordTemp.req_data.data["id"]
if "company_id" in RecordTemp.req_data.data:
item_id = RecordTemp.req_data.data["company_id"]
item_type_id = RecordTypeId[RecordTemp.item_name].value
edit_user = token_data.email
action = RecordTemp.action
# if RecordTemp.action == "update":
# res_body = [chunk async for chunk in res.body_iterator]
# res.body_iterator = iterate_in_threadpool(iter(res_body))
# data_after = json.loads(res_body[0])
# data_after = db.query()
# update_data_before, update_data_after = get_update_data(RecordTemp.req_data.data, data_after)
add_record(db, item_type_id, action, edit_user, item_id,
# before_data=json.dumps(update_data_before),
# after_data=json.dumps(update_data_after)
)
except Exception as e:
print_error(e)
finally:
db.close()
except Exception as e:
print_error(e)
return res