dev
This commit is contained in:
@@ -1,10 +1,16 @@
|
||||
from fastapi.params import Param
|
||||
from api.core.Gzip import register_gzip_request
|
||||
import json
|
||||
from fastapi import APIRouter, Path
|
||||
from api.core.Response import response
|
||||
from api.core.Response import response,Return
|
||||
from api.core.Redis import get_redis_info
|
||||
from api.dp import RedisDep
|
||||
import re
|
||||
from typing import TYPE_CHECKING, Annotated
|
||||
|
||||
from api.types.open import SkillInfo,SkillDetail
|
||||
if TYPE_CHECKING:
|
||||
from api.core.Response import Return
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@@ -22,35 +28,65 @@ def replace_placeholders(template):
|
||||
|
||||
return pattern.sub(repl, template)
|
||||
|
||||
|
||||
@router.get('/skills/')
|
||||
async def get_skills_list(redis: RedisDep,skillName: str) -> Return[list[SkillInfo]]:
|
||||
"""
|
||||
根据技能名称,获取对应的技能列表信息
|
||||
"""
|
||||
key = 'openapi:skills'
|
||||
def get_skills():
|
||||
# This function should retrieve the skills list from the data source
|
||||
# For now, we return a placeholder list
|
||||
with open('./openapi/skills.json', encoding='utf-8') as f:
|
||||
skills_data = json.load(f)
|
||||
return skills_data
|
||||
skills_list = get_redis_info(redis, key, get_skills)
|
||||
data = list(
|
||||
filter(
|
||||
lambda x: re.sub(r'\s+', '', skillName) == re.sub(r'\s+', '', x["skillName"]),
|
||||
skills_list
|
||||
)
|
||||
) if skillName else skills_list
|
||||
return response(data=data)
|
||||
|
||||
|
||||
@router.get('/{job}/{jobGrow}/{skillId}/')
|
||||
async def get_cn_skll_info(redis: RedisDep,
|
||||
job: str = Path(..., title='职业'),
|
||||
jobGrow: str = Path(..., title='转职'),
|
||||
skillId: str = Path(..., title='技能'),
|
||||
level: int = None
|
||||
):
|
||||
job: Annotated[str,Path(..., title='职业')],
|
||||
jobGrow: Annotated[str,Path(..., title='转职')],
|
||||
skillId: Annotated[str,Path(..., title='技能')],
|
||||
level: Annotated[int,Param(..., title="技能等级")]
|
||||
) -> Return[SkillDetail]:
|
||||
"""
|
||||
获取技能详细信息
|
||||
"""
|
||||
skill_info = {}
|
||||
key = f'openapi:{job}:{jobGrow}:{skillId}'
|
||||
def get_skill_info():
|
||||
# This function should retrieve the skill info based on job and jobGrow
|
||||
# For now, we return a placeholder dictionary
|
||||
with open(f'./openapi/{job}/{jobGrow}/cn/skillDetail/{skillId}.json', encoding='utf-8') as f:
|
||||
skill_data = json.load(f)
|
||||
if "levelInfo" in skill_data and "optionDesc" in skill_data["levelInfo"] and skill_data["levelInfo"]["optionDesc"] is not None:
|
||||
skill_data["levelInfo"]["optionDesc"] = replace_placeholders(skill_data["levelInfo"]["optionDesc"])
|
||||
return skill_data
|
||||
try:
|
||||
def get_skill_info():
|
||||
# This function should retrieve the skill info based on job and jobGrow
|
||||
# For now, we return a placeholder dictionary
|
||||
with open(f'./openapi/{job}/{jobGrow}/cn/skillDetail/{skillId}.json', encoding='utf-8') as f:
|
||||
skill_data = json.load(f)
|
||||
if "levelInfo" in skill_data and "optionDesc" in skill_data["levelInfo"] and skill_data["levelInfo"]["optionDesc"] is not None:
|
||||
skill_data["levelInfo"]["optionDesc"] = replace_placeholders(skill_data["levelInfo"]["optionDesc"])
|
||||
return skill_data
|
||||
|
||||
skill_info = get_redis_info(redis, key, get_skill_info)
|
||||
if level is not None:
|
||||
level = max(0,min(level,skill_info.get("maxLevel",0)))
|
||||
if "levelInfo" in skill_info and "rows" in skill_info["levelInfo"]:
|
||||
detail = list(filter(lambda x: x["level"] == level, skill_info["levelInfo"]["rows"]))
|
||||
if detail and len(detail) > 0:
|
||||
skill_info["levelInfo"].update(detail[0])
|
||||
skill_info["levelInfo"]["detail"] = skill_info["levelInfo"].get("optionDesc", "")
|
||||
for key in skill_info["levelInfo"]["optionValue"].keys():
|
||||
skill_info["levelInfo"]["detail"] = skill_info["levelInfo"]["detail"].replace(f"{{{key}}}",str(skill_info["levelInfo"]["optionValue"][key]))
|
||||
del skill_info["levelInfo"]["rows"]
|
||||
skill_info = get_redis_info(redis, key, get_skill_info)
|
||||
if level is not None:
|
||||
level = max(0,min(level,skill_info.get("maxLevel",0)))
|
||||
if "levelInfo" in skill_info and "rows" in skill_info["levelInfo"]:
|
||||
detail = list(filter(lambda x: x["level"] == level, skill_info["levelInfo"]["rows"]))
|
||||
if detail and len(detail) > 0:
|
||||
skill_info["levelInfo"].update(detail[0])
|
||||
skill_info["levelInfo"]["detail"] = skill_info["levelInfo"].get("optionDesc", "")
|
||||
for key in skill_info["levelInfo"]["optionValue"].keys():
|
||||
skill_info["levelInfo"]["detail"] = skill_info["levelInfo"]["detail"].replace(f"{{{key}}}",str(skill_info["levelInfo"]["optionValue"][key]))
|
||||
del skill_info["levelInfo"]["rows"]
|
||||
skill_info["attribute"] = {}
|
||||
skill_info["attribute"].update(skill_info["levelInfo"])
|
||||
del skill_info["levelInfo"]
|
||||
except FileNotFoundError:
|
||||
return response(code=404, message=f"技能信息未找到: {job} {jobGrow} {skillId}", data=None)
|
||||
return response(data=skill_info)
|
||||
|
||||
Reference in New Issue
Block a user