#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ PerToolBox Server - 便签路由 Copyright (C) 2024 Sea Network Technology Studio Author: Canglan License: AGPL v3 """ from fastapi import APIRouter, HTTPException, Query, Request from typing import Optional, List from ...dependencies import CurrentUserDependency, DbDependency from ...models import Note from ...schemas import NoteCreate, NoteUpdate, NoteResponse from ...middleware.rate_limit import rate_limit router = APIRouter(prefix="/api/v1/notes", tags=["notes"]) @router.get("/", response_model=List[NoteResponse]) @rate_limit(requests=100, period=60) async def get_notes( request: Request, # 添加 request 参数 current_user: CurrentUserDependency, db: DbDependency, skip: int = Query(0, ge=0), limit: int = Query(100, ge=1, le=500), archived: bool = False ): return db.query(Note).filter( Note.user_id == current_user.id, Note.is_archived == archived ).order_by(Note.created_at.desc()).offset(skip).limit(limit).all() @router.post("/", response_model=NoteResponse, status_code=201) @rate_limit(requests=50, period=60) async def create_note( request: Request, # 添加 request 参数 data: NoteCreate, current_user: CurrentUserDependency, db: DbDependency ): note = Note(user_id=current_user.id, **data.model_dump()) db.add(note) db.commit() db.refresh(note) return note @router.put("/{note_id}", response_model=NoteResponse) @rate_limit(requests=50, period=60) async def update_note( request: Request, # 添加 request 参数 note_id: int, data: NoteUpdate, current_user: CurrentUserDependency, db: DbDependency ): note = db.query(Note).filter(Note.id == note_id, Note.user_id == current_user.id).first() if not note: raise HTTPException(status_code=404, detail="便签不存在") update_data = data.model_dump(exclude_unset=True) for key, value in update_data.items(): setattr(note, key, value) db.commit() db.refresh(note) return note @router.delete("/{note_id}") @rate_limit(requests=30, period=60) async def delete_note( request: Request, # 添加 request 参数 note_id: int, current_user: CurrentUserDependency, db: DbDependency ): note = db.query(Note).filter(Note.id == note_id, Note.user_id == current_user.id).first() if not note: raise HTTPException(status_code=404, detail="便签不存在") db.delete(note) db.commit() return {"success": True, "message": "已删除"}