Browse Source

add new

master
panda 8 months ago
parent
commit
8df8c77748
  1. 28
      internal/models.py
  2. 6
      main.py
  3. 12
      routers/blogmanage.py
  4. 16
      routers/blogtype.py
  5. 140
      routers/diarymanage.py
  6. 61
      routers/diarytype.py

28
internal/models.py

@ -75,7 +75,33 @@ class Blog(BaseModel):
default=None,
description="备注允许为空"
)]
class Diary(BaseModel):
diarytitle:Annotated[str,Field(
title="日记标题",
pattern=r'^.{4,20}$',
examples=[""],
description="允许6-20个字符"
)]
diarycontent:Annotated[str,Field(
title="日记内容",
min_length=1,
description="最少1个字符"
)]
imglink:Annotated[str,Field(
title="文图地址",
)]
typeid:Annotated[int,Field(
title="类型id",
default=None,
description="类型id允许为空"
)]
descr:Annotated[str,Field(
title="备注",
default=None,
description="备注允许为空"
)]
class Classtic(BaseModel):
header:Annotated[str,Field(
title="语录名称",

6
main.py

@ -4,11 +4,13 @@ from fastapi import Depends, FastAPI, HTTPException, status
from dependencies import *
from internal.models import Token
from fastapi.middleware.cors import CORSMiddleware
from routers import usermanage,typemanage,blogmanage,classticmanage,commonlinkmanage,labelmanage
from routers import blogtype, usermanage,blogmanage,classticmanage,commonlinkmanage,labelmanage,diarymanage,diarytype
app=FastAPI()
app.include_router(usermanage.router)
app.include_router(typemanage.router)
app.include_router(blogtype.router)
app.include_router(blogmanage.router)
app.include_router(diarymanage.router)
app.include_router(diarytype.router)
app.include_router(classticmanage.router)
app.include_router(commonlinkmanage.router)
app.include_router(labelmanage.router)

12
routers/blogmanage.py

@ -22,13 +22,13 @@ async def blog_list(page: int = Query(None), page_size: int = Query(None)):
# 列表参数:博客名称、博客内容、创建时间、博客图片、博客查看时间、博客阅读次数、博客字数、类型名称、标签名列表
select_query = f"""
SELECT blogs.id,blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.imglink,
blogs.wordcount, types.typename,JSON_ARRAYAGG(labels.labelname) AS labelnames
blogs.wordcount, blogtypes.typename,JSON_ARRAYAGG(labels.labelname) AS labelnames
FROM blogs
LEFT JOIN `types` ON blogs.typeid = types.id
LEFT JOIN `blogtypes` ON blogs.typeid = blogtypes.id
LEFT JOIN blog_label ON blog_label.blogid = blogs.id
LEFT JOIN labels ON blog_label.labelid = labels.id
GROUP BY blogs.id, blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.imglink,
blogs.wordcount, types.typename ORDER BY create_at DESC
blogs.wordcount, blogtypes.typename ORDER BY create_at DESC
{limit_clause};
"""
blog_list = fetch_all(select_query)
@ -120,7 +120,7 @@ async def blog_list_search(
select_query = """
SELECT blogs.id, blogtitle, blogcontent,wordcount, typename, create_at, update_at, blogs.descr,JSON_ARRAYAGG(labels.labelname) AS labelnames
FROM blogs
LEFT JOIN `types` ON blogs.typeid = types.id
LEFT JOIN `blogtypes` ON blogs.typeid = blogtypes.id
LEFT JOIN blog_label ON blogs.id = blog_label.blogid
LEFT JOIN labels ON blog_label.labelid = labels.id
WHERE 1=1
@ -138,7 +138,7 @@ async def blog_list_search(
if end_date:
select_query += " AND create_at <= %s"
params.append(end_date)
select_query += "GROUP BY blogs.id, blogs.blogtitle, blogs.blogcontent,blogs.wordcount, types.typename, blogs.create_at, blogs.update_at, blogs.descr ORDER BY create_at DESC"
select_query += "GROUP BY blogs.id, blogs.blogtitle, blogs.blogcontent,blogs.wordcount, blogtypes.typename, blogs.create_at, blogs.update_at, blogs.descr ORDER BY create_at DESC"
blog_list = fetch_all(select_query, params=params, fetchall=True)
return response_success(data=blog_list, message="blog serach succuessfully!")
@ -147,7 +147,7 @@ async def blog_list_search(
@router.get("/list/search/{id}")
async def get_id_blog(id: str = Path(description="博客id")):
select_query = """SELECT blogs.id, blogtitle, blogcontent,wordcount, blogs.typeid, blogs.descr,JSON_ARRAYAGG(labels.id) AS labelnames,imglink FROM blogs
LEFT JOIN `types` ON blogs.typeid = types.id
LEFT JOIN `blogtypes` ON blogs.typeid = blogtypes.id
LEFT JOIN blog_label ON blogs.id = blog_label.blogid
LEFT JOIN labels ON blog_label.labelid = labels.id
WHERE blogs.id = %s

16
routers/typemanage.py → routers/blogtype.py

@ -4,20 +4,20 @@ from internal.database import fetch_one, fetch_all, execute_query, response_succ
from dependencies import get_current_active_user
router = APIRouter(
prefix="/types",
tags=['分类管理']
prefix="/blogtypes",
tags=['博客分类']
)
# 获取列表
@router.get("/list")
async def type_list():
select_query = "SELECT id,typename,descr FROM types;"
select_query = "SELECT id,typename,descr FROM blogtypes;"
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 types (typename,descr) VALUES(%s,%s)"""
insert_query="""INSERT INTO blogtypes (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")
@ -25,7 +25,7 @@ async def type_add(type:Type):
# 单条数据查询
@router.get("/list/search")
async def type_search(typename:str=Query(description="类型名称")):
select_query="SELECT id,typename,descr FROM types WHERE 1=1 "
select_query="SELECT id,typename,descr FROM blogtypes WHERE 1=1 "
params=[]
if typename:
select_query+="AND typename LIKE %s"
@ -37,7 +37,7 @@ async def type_search(typename:str=Query(description="类型名称")):
@router.put("/update/{id}")
async def type_put(type:Type,id: str = Path(description="类型id")):
update_query = (
"UPDATE types SET typename=%s,descr=%s WHERE id=%s;"
"UPDATE blogtypes SET typename=%s,descr=%s WHERE id=%s;"
)
update_data = (type.typename,type.descr,id)
execute_query(update_query, update_data)
@ -47,7 +47,7 @@ async def type_put(type:Type,id: str = Path(description="类型id")):
@router.delete("/delete/{id}")
async def type_del(id: str = Path(description="类型id")):
update_query = (
"DELETE FROM types WHERE id=%s;"
"DELETE FROM blogtypes WHERE id=%s;"
)
update_data = (id)
execute_query(update_query, update_data)
@ -56,6 +56,6 @@ async def type_del(id: str = Path(description="类型id")):
# 根据id查询语录
@router.get("/list/search/{id}")
async def type_search_id(id:str=Path(description="类型id")):
select_query="SELECT * FROM types WHERE id=%s"
select_query="SELECT * FROM blogtypes WHERE id=%s"
type_query=fetch_one(select_query,(id,))
return response_success(data=type_query,message="type search success")

140
routers/diarymanage.py

@ -0,0 +1,140 @@
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="/diarys", tags=["日记管理"])
# 获取列表
@router.get("/list")
async def diary_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 diarys.id,diarys.diarytitle, diarys.diarycontent, diarys.create_at, diarys.imglink,
diarys.wordcount, diarytypes.typename FROM diarys
LEFT JOIN `diarytypes` ON diarys.typeid = diarytypes.id
ORDER BY create_at DESC
{limit_clause};
"""
diary_list = fetch_all(select_query)
count_query = "SELECT COUNT(*) AS total FROM diarys;"
total_records = fetch_one(count_query)["total"]
return response_success({
"diarys": diary_list,
"total": total_records,
}, "diary get list success")
@router.get("/list/{id}")
async def diary_one(id: int):
# 列表参数:日记名称、日记内容、创建时间、日记图片、日记查看时间、日记阅读次数、日记字数、类型名称、标签名列表
select_query = """
SELECT id, diarytitle, diarycontent FROM diarys
WHERE id = %s
ORDER BY create_at DESC;
"""
diary_one = fetch_one(select_query, (id,))
return response_success(diary_one, "diary get diary_one success")
# 日记新增
@router.post("/add")
async def diary_add(diary: Diary, _: User = Depends(get_current_active_user)):
select_query = "SELECT * FROM diarys WHERE diarytitle = %s"
existing_diary = fetch_one(select_query, (diary.diarytitle,))
raise_if_exists(existing_diary, "diary already exists")
insert_query = (
"INSERT INTO diarys (diarytitle, diarycontent,imglink, typeid, descr) VALUES (%s, %s, %s, %s,%s)"
)
insert_value=(diary.diarytitle,diary.diarycontent,diary.imglink,diary.typeid,diary.descr)
execute_query(insert_query,insert_value)
return {"message": "diary created successfully"}
# 日记删除
@router.delete("/delete/{id}")
async def diary_delete(id: str = Path(description="日记id")):
select_query = "SELECT * FROM diarys WHERE id = %s"
existing_diary = fetch_one(select_query, (id,))
raise_if_not_found(existing_diary, "diary not found")
delete_query = "DELETE FROM diarys WHERE id = %s"
execute_query(delete_query, (id,))
return response_success(message="diary delete success")
@router.put("/update/{id}")
async def diary_update(id: int, diary: Diary, _: User = Depends(get_current_active_user)):
# 检查要编辑的日记是否存在
select_query = "SELECT * FROM diarys WHERE id = %s"
existing_diary = fetch_one(select_query, (id,))
raise_if_not_found(existing_diary, "diary not found")
# 更新日记信息
update_query = (
"UPDATE diarys SET diarytitle = %s, diarycontent = %s, imglink = %s, typeid = %s, descr = %s WHERE id = %s"
)
update_data = (diary.diarytitle, diary.diarycontent,
diary.imglink, diary.typeid, diary.descr, id)
execute_query(update_query, update_data)
return response_success("diary update sucess")
# 日记模糊查询
@router.get("/list/search")
async def diary_list_search(
diarytitle: str = Query(None, description="日记标题"),
typename: str = Query(None, description="日记类型"),
start_date: str = Query(None, description="开始时间"),
end_date: str = Query(None, description="结束时间"),
):
select_query = """
SELECT diarys.id, diarytitle, diarycontent,wordcount, typename, create_at, update_at, diarys.descr
FROM diarys
LEFT JOIN `diarytypes` ON diarys.typeid = diarytypes.id
WHERE 1=1
"""
params = []
if diarytitle:
select_query += " AND diarytitle LIKE %s"
params.append(f"%{diarytitle}%")
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"
diary_list = fetch_all(select_query, params=params, fetchall=True)
return response_success(data=diary_list, message="diary serach succuessfully!")
# 根据id查询日记
@router.get("/list/search/{id}")
async def get_id_diary(id: str = Path(description="日记id")):
select_query = """SELECT diarys.id, diarytitle, diarycontent,wordcount, diarys.typeid, diarys.descr,imglink FROM diarys
LEFT JOIN `diarytypes` ON diarys.typeid = diarytypes.id
WHERE diarys.id = %s
"""
diary_list = execute_query(select_query, (id,))
return response_success(data=diary_list, message="diary search success")
# 我就测试一下

61
routers/diarytype.py

@ -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="/diarytypes",
tags=['日记分类']
)
# 获取列表
@router.get("/list")
async def type_list():
select_query = "SELECT id,typename,descr FROM diarytypes;"
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 diarytypes (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 diarytypes 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 diarytypes 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 diarytypes 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 diarytypes WHERE id=%s"
type_query=fetch_one(select_query,(id,))
return response_success(data=type_query,message="type search success")
Loading…
Cancel
Save