初始提交:极码 GeekCode 全栈项目(FastAPI + Vue3)

This commit is contained in:
2026-04-12 10:12:18 +08:00
commit 6aecef16f6
104 changed files with 21009 additions and 0 deletions

View 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": "删除成功"}