This commit is contained in:
2025-06-09 00:18:57 +08:00
parent e3dbe8a7d3
commit 8226a78482
10 changed files with 196 additions and 92 deletions
+28 -36
View File
@@ -2,20 +2,19 @@ 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,Return
from api.core.Response import response
from api.core.Redis import get_redis_info
from api.dp import RedisDep
import re
from typing import TYPE_CHECKING, Annotated
from typing import Annotated
from api.types.open import SkillInfo,SkillDetail
if TYPE_CHECKING:
from api.core.Response import Return
from api.types.open import SkillDetailResponse, SkillsListResponse
router = APIRouter()
register_gzip_request(router)
def replace_placeholders(template):
# 匹配 <int>、<float>、<float1>、<float2> 等
pattern = re.compile(r'<(int|float\d*)>')
@@ -29,64 +28,57 @@ def replace_placeholders(template):
return pattern.sub(repl, template)
@router.get('/skills/')
async def get_skills_list(redis: RedisDep,skillName: str) -> Return[list[SkillInfo]]:
@router.get('/skills/', operation_id='skillsList')
async def get_skills_list(redis: RedisDep, skillName: Annotated[str, Param(..., description='技能名称,支持模糊查询')])->SkillsListResponse:
"""
根据技能名称,获取对应的技能列表信息
"""
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
data = list(filter(lambda x: re.sub(r'\s+', '', skillName) in 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: Annotated[str,Path(..., title='职业')],
jobGrow: Annotated[str,Path(..., title='转职')],
skillId: Annotated[str,Path(..., title='技能')],
level: Annotated[int,Param(..., title="技能等级")]
) -> Return[SkillDetail]:
@router.get('/{jobId}/{jobGrowId}/{skillId}/', operation_id='skillDetail')
async def get_cn_skill_info(redis: RedisDep, jobId: Annotated[str, Path(..., description='职业')], jobGrowId: Annotated[str, Path(..., description='转职')], skillId: Annotated[str, Path(..., description='技能')], level: Annotated[int, Param(..., description='技能等级')]) -> SkillDetailResponse:
"""
获取技能详细信息
"""
skill_info = {}
key = f'openapi:{job}:{jobGrow}:{skillId}'
key = f'openapi:{jobId}:{jobGrowId}:{skillId}'
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:
with open(f'./openapi/{jobId}/{jobGrowId}/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"])
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"]))
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"]
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(code=404, message=f'技能信息未找到: {jobId} {jobGrowId} {skillId}', data=None)
return response(data=skill_info)