feat: add api routers for CURD people
- post /people
- delete /people/{people_id}
- get /peoples
This commit is contained in:
@@ -3,8 +3,10 @@
|
||||
import os
|
||||
import argparse
|
||||
import uvicorn
|
||||
from services import people as people_service
|
||||
from utils import config, logger, rldb
|
||||
|
||||
from web.api import api
|
||||
from utils import config, logger
|
||||
|
||||
# 主函数
|
||||
def main():
|
||||
@@ -16,6 +18,10 @@ def main():
|
||||
config.init(args.config)
|
||||
logger.init()
|
||||
|
||||
rldb.init()
|
||||
|
||||
people_service.init()
|
||||
|
||||
conf = config.get_instance()
|
||||
|
||||
host = conf.get('web_service', 'server_host', fallback='0.0.0.0')
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import logging
|
||||
from typing import Any, Optional
|
||||
from fastapi import FastAPI
|
||||
from fastapi import FastAPI, Query
|
||||
from pydantic import BaseModel
|
||||
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.add_middleware(
|
||||
@@ -20,3 +23,64 @@ class BaseResponse(BaseModel):
|
||||
@api.post("/ping")
|
||||
async def ping():
|
||||
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")
|
||||
Reference in New Issue
Block a user