4 changed files with 218 additions and 22 deletions
@ -0,0 +1,134 @@ |
|||
from fastapi import Depends, APIRouter, Query, Path |
|||
from internal.models import * |
|||
from internal.database import ( |
|||
fetch_one, |
|||
fetch_all, |
|||
execute_query, |
|||
response_success, |
|||
raise_if_exists, |
|||
raise_if_not_found, |
|||
) |
|||
from dependencies import get_current_active_user |
|||
import json |
|||
router = APIRouter(prefix="/expenses", tags=["收支管理"]) |
|||
|
|||
# 获取列表 |
|||
|
|||
|
|||
@router.get("/list") |
|||
async def expense_list(page: int = Query(None), page_size: int = Query(None)): |
|||
limit_clause = "" |
|||
if page is not None and page_size is not None: |
|||
offset = (page - 1) * page_size |
|||
limit_clause = f"LIMIT {page_size} OFFSET {offset}" |
|||
select_query = f""" |
|||
SELECT expenses.id,expenses.pay_price, expenses.live_price, expenses.create_at, expensetypes.typename,expenses.descr FROM expenses |
|||
LEFT JOIN `expensetypes` ON expenses.typeid = expensetypes.id |
|||
ORDER BY create_at DESC |
|||
{limit_clause}; |
|||
""" |
|||
expense_list = fetch_all(select_query) |
|||
return response_success(expense_list, "expense get list success") |
|||
|
|||
|
|||
@router.get("/list/{id}") |
|||
async def expense_one(id: int): |
|||
# 列表参数:收支名称、收支内容、创建时间、收支图片、收支查看时间、收支阅读次数、收支字数、类型名称、标签名列表 |
|||
select_query = """ |
|||
SELECT expenses.id,expenses.pay_price, expenses.live_price, expenses.create_at, expensetypes.typename,expenses.descr FROM expenses |
|||
LEFT JOIN `expensetypes` ON expenses.typeid = expensetypes.id |
|||
WHERE id = %s |
|||
ORDER BY create_at DESC; |
|||
""" |
|||
expense_one = fetch_one(select_query, (id,)) |
|||
return response_success(expense_one, "expense get expense_one success") |
|||
|
|||
|
|||
# 收支新增 |
|||
@router.post("/add") |
|||
async def expense_add(expense: expense, _: User = Depends(get_current_active_user)): |
|||
select_query = "SELECT * FROM expenses WHERE expensetitle = %s" |
|||
existing_expense = fetch_one(select_query, (expense.expensetitle,)) |
|||
raise_if_exists(existing_expense, "expense already exists") |
|||
insert_query = ( |
|||
"INSERT INTO expenses (expensetitle, expensecontent,imglink, typeid, descr) VALUES (%s, %s, %s, %s,%s)" |
|||
) |
|||
insert_value=(expense.expensetitle,expense.expensecontent,expense.imglink,expense.typeid,expense.descr) |
|||
execute_query(insert_query,insert_value) |
|||
|
|||
return {"message": "expense created successfully"} |
|||
|
|||
|
|||
# 收支删除 |
|||
@router.delete("/delete/{id}") |
|||
async def expense_delete(id: str = Path(description="收支id")): |
|||
select_query = "SELECT * FROM expenses WHERE id = %s" |
|||
existing_expense = fetch_one(select_query, (id,)) |
|||
raise_if_not_found(existing_expense, "expense not found") |
|||
delete_query = "DELETE FROM expenses WHERE id = %s" |
|||
execute_query(delete_query, (id,)) |
|||
return response_success(message="expense delete success") |
|||
|
|||
|
|||
@router.put("/update/{id}") |
|||
async def expense_update(id: int, expense: expense, _: User = Depends(get_current_active_user)): |
|||
# 检查要编辑的收支是否存在 |
|||
select_query = "SELECT * FROM expenses WHERE id = %s" |
|||
existing_expense = fetch_one(select_query, (id,)) |
|||
raise_if_not_found(existing_expense, "expense not found") |
|||
|
|||
# 更新收支信息 |
|||
update_query = ( |
|||
"UPDATE expenses SET expensetitle = %s, expensecontent = %s, imglink = %s, typeid = %s, descr = %s WHERE id = %s" |
|||
) |
|||
update_data = (expense.expensetitle, expense.expensecontent, |
|||
expense.imglink, expense.typeid, expense.descr, id) |
|||
execute_query(update_query, update_data) |
|||
return response_success("expense update sucess") |
|||
|
|||
|
|||
# 收支模糊查询 |
|||
@router.get("/list/search") |
|||
async def expense_list_search( |
|||
expensetitle: str = Query(None, description="收支标题"), |
|||
typename: str = Query(None, description="收支类型"), |
|||
start_date: str = Query(None, description="开始时间"), |
|||
end_date: str = Query(None, description="结束时间"), |
|||
): |
|||
select_query = """ |
|||
SELECT expenses.id, expensetitle, expensecontent,wordcount, typename, create_at, update_at, expenses.descr |
|||
FROM expenses |
|||
LEFT JOIN `expensetypes` ON expenses.typeid = expensetypes.id |
|||
WHERE 1=1 |
|||
""" |
|||
params = [] |
|||
if expensetitle: |
|||
select_query += " AND expensetitle LIKE %s" |
|||
params.append(f"%{expensetitle}%") |
|||
if typename: |
|||
select_query += " AND typename LIKE %s" |
|||
params.append(f"%{typename}%") |
|||
if start_date: |
|||
select_query += " AND create_at >= %s" |
|||
params.append(start_date) |
|||
if end_date: |
|||
select_query += " AND create_at <= %s" |
|||
params.append(end_date) |
|||
select_query += "ORDER BY create_at DESC" |
|||
expense_list = fetch_all(select_query, params=params, fetchall=True) |
|||
return response_success(data=expense_list, message="expense serach succuessfully!") |
|||
|
|||
|
|||
# 根据id查询收支 |
|||
@router.get("/list/search/{id}") |
|||
async def get_id_expense(id: str = Path(description="收支id")): |
|||
select_query = """SELECT expenses.id, expensetitle, expensecontent,wordcount, expenses.typeid, expenses.descr,imglink FROM expenses |
|||
LEFT JOIN `expensetypes` ON expenses.typeid = expensetypes.id |
|||
WHERE expenses.id = %s |
|||
|
|||
""" |
|||
expense_list = execute_query(select_query, (id,)) |
|||
return response_success(data=expense_list, message="expense search success") |
|||
|
|||
|
|||
# 我就测试一下 |
@ -0,0 +1,61 @@ |
|||
from fastapi import Depends, APIRouter, status, Query, Path, HTTPException |
|||
from internal.models import * |
|||
from internal.database import fetch_one, fetch_all, execute_query, response_success, raise_if_exists,raise_if_not_found |
|||
from dependencies import get_current_active_user |
|||
|
|||
router = APIRouter( |
|||
prefix="/expensetypes", |
|||
tags=['收支分类'] |
|||
) |
|||
# 获取列表 |
|||
@router.get("/list") |
|||
async def type_list(): |
|||
select_query = "SELECT id,typename,descr FROM expensetypes;" |
|||
type_list = fetch_all(select_query) |
|||
return response_success(type_list, "type get list success") |
|||
|
|||
# 新增 |
|||
@router.post("/add") |
|||
async def type_add(type:Type): |
|||
insert_query="""INSERT INTO expensetypes (typename,descr) VALUES(%s,%s)""" |
|||
insert_value=(type.typename,type.descr) |
|||
execute_query(insert_query,insert_value) |
|||
return response_success(data=type,message="type create success") |
|||
|
|||
# 单条数据查询 |
|||
@router.get("/list/search") |
|||
async def type_search(typename:str=Query(description="类型名称")): |
|||
select_query="SELECT id,typename,descr FROM expensetypes WHERE 1=1 " |
|||
params=[] |
|||
if typename: |
|||
select_query+="AND typename LIKE %s" |
|||
params.append(f"%{typename}%") |
|||
type_query=fetch_all(select_query,params=params,fetchall=True) |
|||
return response_success(data=type_query,message="type search success") |
|||
|
|||
# 语录修改 |
|||
@router.put("/update/{id}") |
|||
async def type_put(type:Type,id: str = Path(description="类型id")): |
|||
update_query = ( |
|||
"UPDATE expensetypes SET typename=%s,descr=%s WHERE id=%s;" |
|||
) |
|||
update_data = (type.typename,type.descr,id) |
|||
execute_query(update_query, update_data) |
|||
return response_success("type update sucess") |
|||
|
|||
# 语录删除 |
|||
@router.delete("/delete/{id}") |
|||
async def type_del(id: str = Path(description="类型id")): |
|||
update_query = ( |
|||
"DELETE FROM expensetypes WHERE id=%s;" |
|||
) |
|||
update_data = (id) |
|||
execute_query(update_query, update_data) |
|||
return response_success() |
|||
|
|||
# 根据id查询语录 |
|||
@router.get("/list/search/{id}") |
|||
async def type_search_id(id:str=Path(description="类型id")): |
|||
select_query="SELECT * FROM expensetypes WHERE id=%s" |
|||
type_query=fetch_one(select_query,(id,)) |
|||
return response_success(data=type_query,message="type search success") |
Write
Preview
Loading…
Cancel
Save
Reference in new issue