修改docker-compose
This commit is contained in:
101
ai_service/routers/base.py
Normal file
101
ai_service/routers/base.py
Normal file
@@ -0,0 +1,101 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy.orm import Session
|
||||
from typing import Generic, TypeVar, List
|
||||
|
||||
from db.session import get_db
|
||||
from schemas.base import ReadSchemaType # 通用的响应模型基类
|
||||
from crud.base import CRUDBase
|
||||
|
||||
# 泛型变量(对应:CRUD类、创建模型、更新模型、响应模型)
|
||||
CRUDType = TypeVar("CRUDType")
|
||||
CreateSchemaType = TypeVar("CreateSchemaType")
|
||||
UpdateSchemaType = TypeVar("UpdateSchemaType")
|
||||
ReadSchemaType = TypeVar("ReadSchemaType")
|
||||
|
||||
|
||||
class GenericRouter(
|
||||
APIRouter,
|
||||
Generic[CRUDType, CreateSchemaType, UpdateSchemaType, ReadSchemaType]
|
||||
):
|
||||
def __init__(
|
||||
self,
|
||||
crud: CRUDType,
|
||||
create_schema: CreateSchemaType,
|
||||
update_schema: UpdateSchemaType,
|
||||
read_schema: ReadSchemaType,
|
||||
prefix: str,
|
||||
tags: List[str],
|
||||
**kwargs
|
||||
):
|
||||
"""
|
||||
初始化通用路由
|
||||
:param crud: CRUD实例(如CRUDApiKey)
|
||||
:param create_schema: 创建Pydantic模型
|
||||
:param update_schema: 更新Pydantic模型
|
||||
:param read_schema: 响应Pydantic模型
|
||||
:param prefix: 路由前缀(如"/api/ai-api-keys")
|
||||
:param tags: 文档标签
|
||||
"""
|
||||
super().__init__(prefix=prefix, tags=tags,** kwargs)
|
||||
self.crud = crud
|
||||
self.create_schema = create_schema
|
||||
self.update_schema = update_schema
|
||||
self.read_schema = read_schema
|
||||
|
||||
# 注册通用路由
|
||||
self.add_api_route(
|
||||
"/",
|
||||
self.create,
|
||||
methods=["POST"],
|
||||
response_model=read_schema,
|
||||
status_code=201
|
||||
)
|
||||
self.add_api_route(
|
||||
"/",
|
||||
self.get_multi,
|
||||
methods=["GET"],
|
||||
response_model=List[read_schema]
|
||||
)
|
||||
self.add_api_route(
|
||||
"/{id}/",
|
||||
self.get,
|
||||
methods=["GET"],
|
||||
response_model=read_schema
|
||||
)
|
||||
self.add_api_route(
|
||||
"/{id}/",
|
||||
self.update,
|
||||
methods=["PUT"],
|
||||
response_model=read_schema
|
||||
)
|
||||
self.add_api_route(
|
||||
"/{id}/",
|
||||
self.remove,
|
||||
methods=["DELETE"]
|
||||
)
|
||||
|
||||
# 创建
|
||||
def create(self, obj_in: CreateSchemaType, db: Session = Depends(get_db)):
|
||||
return self.crud.create(db=db, obj_in=obj_in)
|
||||
|
||||
# 按ID查询
|
||||
def get(self, id: int, db: Session = Depends(get_db)):
|
||||
obj = self.crud.get(db=db, id=id)
|
||||
if not obj:
|
||||
raise HTTPException(status_code=404, detail=f"记录不存在")
|
||||
return obj
|
||||
|
||||
# 分页查询
|
||||
def get_multi(self, page: int = 0, limit: int = 10, db: Session = Depends(get_db)):
|
||||
return self.crud.get_multi(db=db, page=page, limit=limit)
|
||||
|
||||
# 更新
|
||||
def update(self, id: int, obj_in: UpdateSchemaType, db: Session = Depends(get_db)):
|
||||
obj = self.crud.get(db=db, id=id)
|
||||
if not obj:
|
||||
raise HTTPException(status_code=404, detail=f"记录不存在")
|
||||
return self.crud.update(db=db, db_obj=obj, obj_in=obj_in)
|
||||
|
||||
# 删除
|
||||
def remove(self, id: int, db: Session = Depends(get_db)):
|
||||
return self.crud.remove(db=db, id=id)
|
||||
Reference in New Issue
Block a user