Files

64 lines
1.9 KiB
Python

import uuid
from fastapi import FastAPI, HTTPException, Depends
from sqlalchemy.orm import Session
from .database import engine, Base, get_db
from .models import Project, Markdown
from .s3 import upload_to_s3, delete_from_s3
# 启动时创建表
Base.metadata.create_all(bind=engine)
app = FastAPI(title="AI Notion Backend")
@app.get("/health")
def health():
return {"status": "ok"}
# --- Project 接口 ---
@app.post("/projects")
def create_project(name: str, db: Session = Depends(get_db)):
project = Project(name=name)
db.add(project)
db.commit()
db.refresh(project)
return project
@app.delete("/projects/{project_id}")
def delete_project(project_id: str, db: Session = Depends(get_db)):
project = db.query(Project).filter(Project.id == project_id).first()
if not project:
raise HTTPException(status_code=404, detail="Project not found")
# 1. 获取该项目下所有 Markdown 的 S3 keys 并从 S3 删除
s3_keys = [md.s3_key for md in project.markdowns]
delete_from_s3(s3_keys)
# 2. 从数据库删除项目(SQLAlchemy 会自动级联删除对应的 Markdown 记录)
db.delete(project)
db.commit()
return {"message": f"Project {project_id} and associated files purged."}
# --- Markdown 接口 ---
@app.post("/projects/{project_id}/markdowns")
def upload_markdown(project_id: str, title: str, content: str, db: Session = Depends(get_db)):
# 验证项目是否存在
project = db.query(Project).filter(Project.id == project_id).first()
if not project:
raise HTTPException(status_code=404, detail="Project not found")
# 生成 S3 路径
s3_key = f"projects/{project_id}/{uuid.uuid4()}.md"
# 1. 业务逻辑分离:上传 S3
upload_to_s3(s3_key, content)
# 2. 存入数据库记录
md_record = Markdown(title=title, s3_key=s3_key, project_id=project_id)
db.add(md_record)
db.commit()
db.refresh(md_record)
return md_record