zenith-backend / app /routers /projects.py
teoat's picture
Upload folder using huggingface_hub
4ae946d verified
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from sqlalchemy.orm import Session
from app.services.business.project_service import project_service
from app.services.infrastructure.auth_service import auth_service
from core.database import get_db
router = APIRouter()
# Response models
class ProjectResponse(BaseModel):
id: str
name: str
description: str | None = None
created_at: str | None = None
class Config:
from_attributes = True
class ProjectCreate(BaseModel):
name: str
description: str | None = None
@router.get("", response_model=list[ProjectResponse])
async def get_projects(
db: Session = Depends(get_db),
current_user: dict = Depends(auth_service.get_current_user),
):
"""List all projects"""
projects = project_service.get_projects(db)
# Ensure default exists if list is empty, or wait for explicit init?
# Let's ensure default exists on first load to be safe.
if not projects:
default_p = project_service.create_default_project(db)
projects = [default_p]
return [
{
"id": p.id,
"name": p.name,
"description": p.description,
"created_at": p.created_at.isoformat() if p.created_at else None,
}
for p in projects
]
@router.post("", response_model=ProjectResponse, status_code=201)
async def create_project(
project: ProjectCreate,
db: Session = Depends(get_db),
current_user: dict = Depends(auth_service.get_current_user),
):
"""Create a new project"""
user_id = getattr(current_user, "id", str(current_user)) if current_user else None
new_project = project_service.create_project(
db, name=project.name, description=project.description, created_by=user_id
)
return {
"id": new_project.id,
"name": new_project.name,
"description": new_project.description,
"created_at": (
new_project.created_at.isoformat() if new_project.created_at else None
),
}
@router.get("/{project_id}", response_model=ProjectResponse)
async def get_project(
project_id: str,
db: Session = Depends(get_db),
current_user: dict = Depends(auth_service.get_current_user),
):
"""Get project details"""
project = project_service.get_project(db, project_id)
if not project:
raise HTTPException(status_code=404, detail="Project not found")
return {
"id": project.id,
"name": project.name,
"description": project.description,
"created_at": project.created_at.isoformat() if project.created_at else None,
}