61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
# 编写更订单相关的增删改查接口,结合数据库
|
|
from fastapi import FastAPI, APIRouter, Depends
|
|
from sqlalchemy import *
|
|
from sqlalchemy.orm import declarative_base,sessionmaker
|
|
from datetime import datetime
|
|
from pydantic import BaseModel
|
|
|
|
from model.order import OrderRequest,Order,get_session,OrderResponse
|
|
|
|
from dao.order_dao import get_order
|
|
|
|
route = APIRouter(prefix="/order",tags=["order"])
|
|
|
|
# 模糊查询
|
|
@route.get('/',response_model=OrderResponse)
|
|
def orders(id:int=None, user_id:int=None, title:str=None,session=Depends(get_session)):
|
|
|
|
return get_order(id,user_id,title,session)
|
|
|
|
# todo 请求响应模型序列化Order类问题
|
|
@route.get('/no_response_model')
|
|
def orders(id:int=None, user_id:int=None, title:str=None,session=Depends(get_session)):
|
|
q = session.query(Order)
|
|
if id: q = q.filter(Order.id == id)
|
|
if user_id: q = q.filter(Order.userid == user_id)
|
|
if title: q = q.where(Order.title.like('%' + title + '%'))
|
|
res = q.all()
|
|
return res
|
|
|
|
|
|
|
|
@route.get('/{id}',response_model=OrderResponse)
|
|
def orders(id:int,session=Depends(get_session)):
|
|
r = session.query(Order).filter( Order.id == id ).first()
|
|
session.close()
|
|
return {"data":
|
|
{"order_id":r.id,'order_title':r.title,"user_id":r.userid,"create_date":r.create_date,"update_date":r.update_date}
|
|
}
|
|
|
|
@route.delete('/',response_model=OrderResponse)
|
|
def orders(session=Depends(get_session)):
|
|
return '删除订单'
|
|
|
|
|
|
@route.post('/',response_model=OrderResponse)
|
|
def orders(order:OrderRequest,session=Depends(get_session)):
|
|
d = order.model_dump() # d = {"title":xxx,"userid":xxx}
|
|
o1 = Order( **d )
|
|
session.add(o1)
|
|
session.commit()
|
|
session.close()
|
|
return {'code':200,'detail':'添加成功!'}
|
|
|
|
|
|
@route.put('/{id}',response_model=OrderResponse)
|
|
def orders(order:OrderRequest,id:int,session=Depends(get_session)):
|
|
r = session.query( Order ).filter( Order.id == id ).update( order.model_dump(exclude_unset=True) )
|
|
session.commit()
|
|
session.close()
|
|
return OrderResponse(status_code='200',detail='ok',total=r)
|