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