feat: add api routers for CURD people

- post     /people
- delete   /people/{people_id}
- get      /peoples
This commit is contained in:
2025-11-11 23:32:01 +08:00
parent 496f35a386
commit d179418e7d
2 changed files with 72 additions and 2 deletions

View File

@@ -3,8 +3,10 @@
import os import os
import argparse import argparse
import uvicorn import uvicorn
from services import people as people_service
from utils import config, logger, rldb
from web.api import api from web.api import api
from utils import config, logger
# 主函数 # 主函数
def main(): def main():
@@ -16,6 +18,10 @@ def main():
config.init(args.config) config.init(args.config)
logger.init() logger.init()
rldb.init()
people_service.init()
conf = config.get_instance() conf = config.get_instance()
host = conf.get('web_service', 'server_host', fallback='0.0.0.0') host = conf.get('web_service', 'server_host', fallback='0.0.0.0')

View File

@@ -1,7 +1,10 @@
import logging
from typing import Any, Optional from typing import Any, Optional
from fastapi import FastAPI from fastapi import FastAPI, Query
from pydantic import BaseModel from pydantic import BaseModel
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from services.people import get_instance as get_people_service
from models.people import People
api = FastAPI(title="Single People Management and Searching", version="0.1") api = FastAPI(title="Single People Management and Searching", version="0.1")
api.add_middleware( api.add_middleware(
@@ -20,3 +23,64 @@ class BaseResponse(BaseModel):
@api.post("/ping") @api.post("/ping")
async def ping(): async def ping():
return BaseResponse(error_code=0, error_info="success") return BaseResponse(error_code=0, error_info="success")
class PostPeopleRequest(BaseModel):
people: dict
@api.post("/people")
async def post_people(post_people_request: PostPeopleRequest):
logging.debug(f"post_people_request: {post_people_request}")
people = People.from_dict(post_people_request.people)
service = get_people_service()
people.id, error = service.save(people)
if not error.success:
return BaseResponse(error_code=error.code, error_info=error.info)
return BaseResponse(error_code=0, error_info="success", data=people.id)
class GetPeopleRequest(BaseModel):
query: Optional[str] = None
conds: Optional[dict] = None
top_k: int = 5
@api.get("/peoples")
async def get_peoples(
name: Optional[str] = Query(None, description="姓名"),
gender: Optional[str] = Query(None, description="性别"),
age: Optional[int] = Query(None, description="年龄"),
height: Optional[int] = Query(None, description="身高"),
marital_status: Optional[str] = Query(None, description="婚姻状态"),
limit: int = Query(10, description="分页大小"),
offset: int = Query(0, description="分页偏移量"),
):
# 解析查询参数为字典
conds = {}
if name:
conds["name"] = name
if gender:
conds["gender"] = gender
if age:
conds["age"] = age
if height:
conds["height"] = height
if marital_status:
conds["marital_status"] = marital_status
logging.info(f"conds: , limit: {limit}, offset: {offset}")
results = []
service = get_people_service()
results, error = service.list(conds, limit=limit, offset=offset)
logging.info(f"query results: {results}")
if not error.success:
return BaseResponse(error_code=error.code, error_info=error.info)
peoples = [people.to_dict() for people in results]
return BaseResponse(error_code=0, error_info="success", data=peoples)
@api.delete("/people/{people_id}")
async def delete_people(people_id: str):
service = get_people_service()
error = service.delete(people_id)
if not error.success:
return BaseResponse(error_code=error.code, error_info=error.info)
return BaseResponse(error_code=0, error_info="success")