Files
video-gen/video-gen-api/app/api/v1/projects.py
T
2026-05-25 17:08:18 +08:00

69 lines
2.0 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.dependencies import get_db, get_current_user
from app.models.user import User
from app.models.project import Project
from app.models.generation_record import GenerationRecord
from app.schemas.project import ProjectCreate, ProjectOut
from app.utils.id_gen import generate_id
router = APIRouter(prefix="/projects", tags=["projects"])
@router.get("", response_model=list[ProjectOut])
async def list_projects(
current_user: User = Depends(get_current_user),
db: AsyncSession = Depends(get_db),
):
result = await db.execute(
select(Project)
.where(Project.user_id == current_user.id)
.order_by(Project.created_at.desc())
)
return result.scalars().all()
@router.post("", response_model=ProjectOut)
async def create_project(
req: ProjectCreate,
current_user: User = Depends(get_current_user),
db: AsyncSession = Depends(get_db),
):
project = Project(
id=generate_id(),
user_id=current_user.id,
name=req.name,
industry=req.industry,
)
db.add(project)
await db.flush()
return project
@router.delete("/{project_id}")
async def delete_project(
project_id: str,
current_user: User = Depends(get_current_user),
db: AsyncSession = Depends(get_db),
):
result = await db.execute(
select(Project).where(
Project.id == project_id,
Project.user_id == current_user.id,
)
)
project = result.scalar_one_or_none()
if not project:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="项目不存在")
# Cascade delete generation records
from sqlalchemy import delete
await db.execute(
delete(GenerationRecord).where(GenerationRecord.project_id == project_id)
)
await db.delete(project)
await db.flush()
return {"message": "ok"}