初始提交:极码 GeekCode 全栈项目(FastAPI + Vue3)
This commit is contained in:
118
backend/routers/bookmarks.py
Normal file
118
backend/routers/bookmarks.py
Normal file
@@ -0,0 +1,118 @@
|
||||
"""网站收藏路由"""
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy.orm import Session
|
||||
from typing import List
|
||||
from database import get_db
|
||||
from models.bookmark import BookmarkSite
|
||||
from models.user import User
|
||||
from schemas.bookmark import BookmarkCreate, BookmarkUpdate, BookmarkResponse, ReorderRequest
|
||||
from routers.auth import get_current_user
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("", response_model=List[BookmarkResponse])
|
||||
def get_bookmarks(
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""获取当前用户的收藏网站列表"""
|
||||
bookmarks = (
|
||||
db.query(BookmarkSite)
|
||||
.filter(BookmarkSite.user_id == current_user.id)
|
||||
.order_by(BookmarkSite.sort_order, BookmarkSite.created_at)
|
||||
.all()
|
||||
)
|
||||
return [BookmarkResponse.model_validate(b) for b in bookmarks]
|
||||
|
||||
|
||||
@router.post("", response_model=BookmarkResponse)
|
||||
def create_bookmark(
|
||||
data: BookmarkCreate,
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""添加收藏网站"""
|
||||
# 获取当前最大排序值
|
||||
max_order = (
|
||||
db.query(BookmarkSite.sort_order)
|
||||
.filter(BookmarkSite.user_id == current_user.id)
|
||||
.order_by(BookmarkSite.sort_order.desc())
|
||||
.first()
|
||||
)
|
||||
next_order = (max_order[0] + 1) if max_order else 0
|
||||
|
||||
bookmark = BookmarkSite(
|
||||
user_id=current_user.id,
|
||||
name=data.name,
|
||||
url=data.url,
|
||||
icon=data.icon,
|
||||
sort_order=next_order,
|
||||
)
|
||||
db.add(bookmark)
|
||||
db.commit()
|
||||
db.refresh(bookmark)
|
||||
return BookmarkResponse.model_validate(bookmark)
|
||||
|
||||
|
||||
@router.put("/reorder")
|
||||
def reorder_bookmarks(
|
||||
data: ReorderRequest,
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""批量更新排序"""
|
||||
for item in data.items:
|
||||
db.query(BookmarkSite).filter(
|
||||
BookmarkSite.id == item.id,
|
||||
BookmarkSite.user_id == current_user.id,
|
||||
).update({"sort_order": item.sort_order})
|
||||
db.commit()
|
||||
return {"message": "排序已更新"}
|
||||
|
||||
|
||||
@router.put("/{bookmark_id}", response_model=BookmarkResponse)
|
||||
def update_bookmark(
|
||||
bookmark_id: int,
|
||||
data: BookmarkUpdate,
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""编辑收藏网站"""
|
||||
bookmark = db.query(BookmarkSite).filter(
|
||||
BookmarkSite.id == bookmark_id,
|
||||
BookmarkSite.user_id == current_user.id,
|
||||
).first()
|
||||
if not bookmark:
|
||||
raise HTTPException(status_code=404, detail="收藏不存在")
|
||||
|
||||
if data.name is not None:
|
||||
bookmark.name = data.name
|
||||
if data.url is not None:
|
||||
bookmark.url = data.url
|
||||
if data.icon is not None:
|
||||
bookmark.icon = data.icon
|
||||
if data.sort_order is not None:
|
||||
bookmark.sort_order = data.sort_order
|
||||
|
||||
db.commit()
|
||||
db.refresh(bookmark)
|
||||
return BookmarkResponse.model_validate(bookmark)
|
||||
|
||||
|
||||
@router.delete("/{bookmark_id}")
|
||||
def delete_bookmark(
|
||||
bookmark_id: int,
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""删除收藏网站"""
|
||||
bookmark = db.query(BookmarkSite).filter(
|
||||
BookmarkSite.id == bookmark_id,
|
||||
BookmarkSite.user_id == current_user.id,
|
||||
).first()
|
||||
if not bookmark:
|
||||
raise HTTPException(status_code=404, detail="收藏不存在")
|
||||
db.delete(bookmark)
|
||||
db.commit()
|
||||
return {"message": "删除成功"}
|
||||
Reference in New Issue
Block a user