note/api/main.py
2026-04-23 20:42:16 +08:00

99 lines
2.7 KiB
Python

from config import settings
from fastapi import FastAPI, Depends
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from typing import List
from datetime import datetime
from SQLAlchemy import NoteManager
from auth import get_current_user
app = FastAPI(title=settings.TITLE, version=settings.VERSION, debug=settings.DEBUG)
noteManager = NoteManager(settings.DATABASE_URL)
# CORS 配置
app.add_middleware(
CORSMiddleware,
allow_credentials=True,
allow_origin_regex=r"http[s]?://172\.30\.0\..*:5173|http[s]?://.*\.yuany3721\.site|http[s]?://yuany3721\.site",
allow_methods=["GET", "POST"],
allow_headers=["*"],
)
# 认证依赖 - 所有路由都需要认证
dependencies = [Depends(get_current_user)]
@app.get("/note/")
async def root():
return {"api": "note", "message": "Noting backend", "auth": "Protected by Authentik OIDC"}
class PageRequest(BaseModel):
page: int = 1
pageSize: int = 10
name: str
noteFilter: str = ""
tagFilter: List[str] = []
@app.post("/note/getByPage", dependencies=dependencies)
async def getByPage(request: PageRequest):
return noteManager.get_note_by_page(request.name, request.page, request.pageSize, request.noteFilter, request.tagFilter)
class FilterRequest(BaseModel):
name: str
noteFilter: str = ""
tagFilter: List[str] = []
@app.post("/note/getTotal", dependencies=dependencies)
async def getTotal(request: FilterRequest):
return noteManager.get_total_note_num(request.name, request.noteFilter, request.tagFilter)
@app.post("/note/getAllTags", dependencies=dependencies)
async def getAllTags(request: FilterRequest):
return noteManager.get_all_tags(request.name, request.noteFilter, request.tagFilter)
class DeleteNoteRequest(BaseModel):
name: str
id: int
@app.post("/note/deleteNote", dependencies=dependencies)
async def deleteNote(request: DeleteNoteRequest):
return noteManager.delete_note(request.name, request.id)
class NewNoteRequest(BaseModel):
name: str
content: str
tags: List[str] = []
@app.post("/note/newNote", dependencies=dependencies)
async def newNote(request: NewNoteRequest):
return noteManager.create_note(request.name, request.content, request.tags)
class UpdateNoteRequest(BaseModel):
name: str
id: int
content: str
tags: List[str] = []
created_at: datetime = datetime.now()
@app.post("/note/updateNote", dependencies=dependencies)
async def updateNote(request: UpdateNoteRequest):
return noteManager.update_note(request.name, request.id, request.content, request.tags, request.created_at)
if __name__ == "__main__":
import uvicorn
uvicorn.run("main:app", host="0.0.0.0", port=7022, reload=settings.DEBUG)