diff --git a/internal/database.py b/internal/database.py index 968a80d..5333c8f 100644 --- a/internal/database.py +++ b/internal/database.py @@ -18,12 +18,14 @@ def create_connection(): # 执行 SQL 查询 -def execute_query(query, params=None, fetchall=False): +def execute_query(query, params=None, fetchall=False,lastrowid=False): conn = create_connection() with conn.cursor() as cursor: cursor.execute(query, params) if fetchall: result = cursor.fetchall() + elif lastrowid: + result = cursor.lastrowid else: result = cursor.fetchone() conn.commit() diff --git a/internal/models.py b/internal/models.py index 74e95a9..735df7e 100644 --- a/internal/models.py +++ b/internal/models.py @@ -33,6 +33,22 @@ class User(BaseModel): class UserInDB(User): hashed_password: str = None +class Label(BaseModel): + id:Annotated[int,Field( + title="标签id", + description="主键自增" + )] + labelname:Annotated[str,Field( + title="标签名称", + description="名称不允许为空" + )] + descr:Annotated[str,Field( + title="备注", + default=None, + description="备注允许为空" + )] + + class Blog(BaseModel): blogtitle:Annotated[str,Field( title="博客标题", @@ -45,11 +61,15 @@ class Blog(BaseModel): 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, @@ -97,14 +117,3 @@ class Type(BaseModel): description="备注允许为空" )] -class Label(BaseModel): - labelname:Annotated[str,Field( - title="标签名称", - description="名称不允许为空" - )] - descr:Annotated[str,Field( - title="备注", - default=None, - description="备注允许为空" - )] - \ No newline at end of file diff --git a/routers/blogmanage.py b/routers/blogmanage.py index 915a752..b26e54d 100644 --- a/routers/blogmanage.py +++ b/routers/blogmanage.py @@ -18,8 +18,8 @@ router = APIRouter(prefix="/blogs", tags=["博客管理"]) @router.get("/list") async def blog_list(): # 列表参数:博客名称、博客内容、创建时间、博客图片、博客查看时间、博客阅读次数、博客字数、类型名称、标签名列表 - select_query = """ - SELECT blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.img, + select_query = """ + SELECT blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.imglink, blogs.readminite, blogs.readnum, blogs.wordcount, types.typename, JSON_ARRAYAGG(labels.labelname) AS labelnames FROM blogs @@ -27,7 +27,7 @@ LEFT JOIN `types` ON blogs.typeid = types.id LEFT JOIN blog_label ON blog_label.blogid = blogs.id LEFT JOIN labels ON blog_label.labelid = labels.id -GROUP BY blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.img, +GROUP BY blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.imglink, blogs.readminite, blogs.readnum, blogs.wordcount, types.typename ORDER BY create_at DESC; @@ -38,16 +38,20 @@ GROUP BY blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.img, # 博客新增 @router.post("/add") -async def blog_add(blog: Blog, _: User = Depends(get_current_active_user)): +async def blog_add(blog: Blog,labels: list[Label], _: User = Depends(get_current_active_user)): select_query = "SELECT * FROM blogs WHERE blogtitle = %s" existing_blog = fetch_one(select_query, (blog.blogtitle,)) - raise_if_exists(existing_blog, "blog is already exists") + raise_if_exists(existing_blog, "Blog already exists") insert_query = ( - "INSERT INTO blogs (blogtitle,blogcontent,typeid,descr) VALUES (%s,%s,%s,%s)" + "INSERT INTO blogs (blogtitle, blogcontent,imglink, typeid, descr) VALUES (%s, %s, %s, %s,%s)" ) - insert_data = (blog.blogtitle, blog.blogcontent, blog.typeid, blog.descr) - execute_query(insert_query, insert_data) - return response_success(data=blog, message="blog create success") + insert_data = (blog.blogtitle, blog.blogcontent,blog.imglink,blog.typeid, blog.descr) + blog_id = execute_query(insert_query, insert_data, lastrowid=True) + for label in labels: + insert_label_query="INSERT INTO blog_label (blogid, labelid) VALUES (%s, %s)" + execute_query(insert_label_query,(blog_id,label.id)) + + return {"message": "Blog created successfully", "blog_id": blog_id} # 博客删除