v1.0.0提交
This commit is contained in:
79
backend/routers/v1/notes.py
Normal file
79
backend/routers/v1/notes.py
Normal file
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
PerToolBox Server - 便签路由
|
||||
Copyright (C) 2024 Sea Network Technology Studio
|
||||
Author: Canglan <admin@sea-studio.top>
|
||||
License: AGPL v3
|
||||
"""
|
||||
|
||||
from fastapi import APIRouter, HTTPException, Query
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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": "已删除"}
|
||||
Reference in New Issue
Block a user