xbackend/api/api_v1/endpoints/data_mana.py
2021-11-05 17:41:51 +08:00

133 lines
3.9 KiB
Python

import json
from aioredis import Redis
from fastapi import APIRouter, Depends, Request, File
from motor.motor_asyncio import AsyncIOMotorDatabase
import pandas as pd
import crud, schemas
from api import deps
from core.config import settings
from db import get_database
from db.ckdb import CKDrive, get_ck_db
from db.redisdb import get_redis_pool
router = APIRouter()
__all__ = 'router',
@router.get("/attr_list")
async def read_data_attr(
request: Request,
game: str,
cat: str,
db: AsyncIOMotorDatabase = Depends(get_database),
rdb: Redis = Depends(get_redis_pool),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""事件属性列表"""
data = await rdb.get(f'{game}_{cat}')
data = json.loads(data)
res = []
data_attr = await crud.data_attr.find_many(db, {'game': game, 'cat': cat})
data_attr = {item['name']: item for item in data_attr}
for k, v in data.items():
res.append(
{'name': k,
'data_type': settings.CK_TYPE_DICT.get(v),
'show_name': data_attr.get(k, {}).get('show_name', ''),
'is_show': data_attr.get(k, {}).get('is_show', True),
'attr_type': '预置属性' if k.startswith('#') else '自定义属性',
'unit': ''
}
)
return schemas.Msg(code=0, msg='ok', data=res)
@router.post("/attr_edit")
async def edit_data_attr(
request: Request,
game: str,
data_in: schemas.DataAttrEdit,
db: AsyncIOMotorDatabase = Depends(get_database),
rdb: Redis = Depends(get_redis_pool),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""编辑事件属性"""
await crud.data_attr.edit_data_attr(db, game, data_in)
return schemas.Msg(code=0, msg='ok', data=data_in)
#
# @router.post("/add_select_map")
# async def add_map(
# request: Request,
# game: str,
# data_in: schemas.SelectMap,
# db: AsyncIOMotorDatabase = Depends(get_database),
# current_user: schemas.UserDB = Depends(deps.get_current_user)
# ) -> schemas.Msg:
# """添加属性值选择映射"""
#
# """
# {
# game:aaa,
# attr_name:bbb,
# map_:{
# '区服aa':'1',
# '区服vvv':'5',
# }
#
# }
# """
# await crud.select_map.save(db, data_in)
# return schemas.Msg(code=0, msg='ok', data=data_in)
@router.post("/add_select_map")
async def add_select_map(
request: Request,
game: str,
file: bytes = File(...),
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""添加属性值选择映射"""
dfs = pd.read_excel(file, engine='openpyxl', sheet_name=None)
for attr_name, df in dfs.items():
df['id'] = df['id'].astype(str)
map_ = df.to_dict('records')
data_in = schemas.SelectMap(game=game, attr_name=attr_name, map_=map_)
await crud.select_map.save(db, data_in)
return schemas.Msg(code=0, msg='ok', data=1)
@router.get("/select_list")
async def select_list(
request: Request,
game: str,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""属性值选择映射列表"""
resp = await crud.select_map.get_list(db, game)
return schemas.Msg(code=0, msg='ok', data=resp)
@router.post("/select_attr")
async def select_attr(
request: Request,
game: str,
data_in: schemas.SelectAttr,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""属性值选择映射"""
resp = await crud.select_map.get_select(db, data_in, game)
code = 0 if resp else -9
return schemas.Msg(code=code, msg='ok', data=resp)