diff --git a/src/api/test.py b/src/api/test.py index 4d9ceee..33d2adc 100644 --- a/src/api/test.py +++ b/src/api/test.py @@ -5,12 +5,11 @@ import aioredis from fastapi import APIRouter, Depends, Query from fastapi.security import OAuth2PasswordBearer from fastapi_plugins import depends_redis -from fastapi_sqlalchemy import db from pydantic import BaseModel -from pydantic_sqlalchemy import sqlalchemy_to_pydantic -from src.biz.test import get_user_by_id -from src.models.devices_place import DevicesPlace +from biz.example import get_user_by_id +from dtos import response +from dtos.example import UserListPagesResult, UserListResult router = APIRouter(prefix="/test") @@ -51,20 +50,20 @@ async def get_user(): async def read_users_me(current_user: User = Depends(get_current_user)): return current_user +@router.get('/users', response_model=UserListResult) +def get_user_list(): + data = [{"id": 12, "user_name": "lala"}] + res = response(data=data, message="Ok!") + return res -# 数据库查询 -@router.get("/query") -def query(mid: Optional[str] = Query(None, description='mid'), - region_id: int = Query(..., description="区域Id"), - limit: int = 20, - page_count: int = 1): - if mid is None: - records = db.session.query(DevicesPlace).filter(DevicesPlace.region_id == region_id)\ - .order_by(DevicesPlace.id).limit(limit).offset(limit*(page_count-1)).all() - else: - records = db.session.query(DevicesPlace).filter(DevicesPlace.mid == mid)\ - .filter(DevicesPlace.region_id == region_id).order_by(DevicesPlace.id).limit(limit).offset(limit*(page_count-1)).all() - return records + +@router.get('/user_list_pages', response_model=UserListPagesResult) +async def get_user_list_pages(page: int = Query(..., description="当前页码"), + limit: int = 20): + items = [{"id": 12, "user_name": "lala"}] + data = {"totalRecords": limit, "totalPages": 0, "currentPage": page, "items": items} + res = response(data=data, message="Ok!") + return res # Redis 缓存查询 diff --git a/src/biz/test.py b/src/biz/example.py similarity index 100% rename from src/biz/test.py rename to src/biz/example.py diff --git a/src/dtos/__init__.py b/src/dtos/__init__.py index eef1b9a..3afeeda 100644 --- a/src/dtos/__init__.py +++ b/src/dtos/__init__.py @@ -3,24 +3,38 @@ from typing import Any, List, Union from pydantic import BaseModel +def response(status=200, message="", data=None, err_code=0, err_detail="", target_url=""): + result = { + "result": data, + "code": status, + "error": { + "code": status if not err_code and status != 200 else err_code, + "message": message, + "details": err_detail if err_detail else message + } + } + return result + + class ErrorModel(BaseModel): code: int = 200 message: str = "" details: str = "" + class PageItemModel(BaseModel): totalRecords: int = 0 totalPages: int = 0 currentPage: int = 0 - items: List[Any] = [] + items: List[BaseModel] = [] class BaseResponse(BaseModel): result: Union[dict, list, Any] = None code: int = 200 - error: ErrorModel = ErrorModel() + error: ErrorModel class ListResponse(BaseResponse): - result: PageItemModel = PageItemModel() + result: PageItemModel class SuccessResponse(BaseResponse): result: dict = dict(success=True) diff --git a/src/dtos/example.py b/src/dtos/example.py new file mode 100644 index 0000000..4cb6a47 --- /dev/null +++ b/src/dtos/example.py @@ -0,0 +1,26 @@ +from typing import List + +from pydantic import Field + +from src.dtos import BaseModel, BaseResponse, ListResponse, PageItemModel + + +class UserDto(BaseModel): + id: int = Field(None, alias='id', description='id') + userName: str = Field(None, description='用户名') + + class Config: + orm_mode = True + allow_population_by_field_name = True + + +class UserListPagesItem(PageItemModel): + items: List[UserDto] + + +class UserListPagesResult(ListResponse): + result: UserListPagesItem + + +class UserListResult(BaseResponse): + result: List[UserDto] \ No newline at end of file