v1.0.0提交

This commit is contained in:
2026-03-31 16:03:55 +08:00
parent 5f3945ae03
commit dce843fd9d
25 changed files with 1702 additions and 0 deletions

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