99 lines
2.7 KiB
Python
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)
|