119 lines
3.4 KiB
Python
119 lines
3.4 KiB
Python
"""网站收藏路由"""
|
|
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": "删除成功"}
|