download
raw
1.64 kB
"""
Projects API Router
"""
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from typing import List, Optional
from datetime import datetime
import uuid
router = APIRouter()
projects_db = {}
class ProjectCreate(BaseModel):
name: str
description: Optional[str] = None
class Project(BaseModel):
id: str
name: str
description: Optional[str] = None
created_at: datetime
updated_at: datetime
class ProjectSummary(BaseModel):
id: str
name: str
description: Optional[str] = None
created_at: datetime
@router.post("/", response_model=Project)
async def create_project(project: ProjectCreate):
project_id = str(uuid.uuid4())
now = datetime.utcnow()
new_project = {
"id": project_id,
"name": project.name,
"description": project.description,
"created_at": now,
"updated_at": now
}
projects_db[project_id] = new_project
return Project(**new_project)
@router.get("/", response_model=List[ProjectSummary])
async def list_projects():
return [ProjectSummary(**p) for p in projects_db.values()]
@router.get("/{project_id}", response_model=Project)
async def get_project(project_id: str):
if project_id not in projects_db:
raise HTTPException(status_code=404, detail="Project not found")
return Project(**projects_db[project_id])
@router.delete("/{project_id}")
async def delete_project(project_id: str):
if project_id not in projects_db:
raise HTTPException(status_code=404, detail="Project not found")
del projects_db[project_id]
return {"message": "Project deleted"}

Xet Storage Details

Size:
1.64 kB
·
Xet hash:
510e0dfbf46d4d57d47ddb6a2370b8d39ef1830352e0ec63f8ebab153d8f0a95

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.