DocWeave / backend /app /api /workspaces.py
shak3008's picture
feat: complete end-to-end platform with all standout behaviors
fcacf10
Raw
History Blame Contribute Delete
2.73 kB
from uuid import UUID
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from app.core.dependencies import get_current_user
from app.database.session import get_db
from app.models.user import User
from app.models.workspace import WorkspaceStatus
from app.schemas.workspace import (
WorkspaceCreate,
WorkspaceResponse,
)
from app.services.workspace_service import WorkspaceService
router = APIRouter(
prefix="/workspaces",
tags=["Workspaces"],
)
@router.post(
"",
response_model=WorkspaceResponse,
)
def create_workspace(
workspace: WorkspaceCreate,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db),
):
service = WorkspaceService(db)
return service.create_workspace(
workspace,
current_user.id,
)
@router.get(
"",
response_model=list[WorkspaceResponse],
)
def list_workspaces(
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db),
):
return WorkspaceService(db).list_workspaces(
current_user.id
)
@router.delete("/{workspace_id}", status_code=204)
def delete_workspace(
workspace_id: UUID,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db),
):
"""Soft-delete a workspace. It will no longer appear in listings."""
service = WorkspaceService(db)
workspace = service.get_workspace(workspace_id)
if workspace is None:
raise HTTPException(status_code=404, detail="Workspace not found.")
if workspace.created_by != current_user.id:
raise HTTPException(status_code=403, detail="You do not have access to this workspace.")
if workspace.status == WorkspaceStatus.DELETED:
raise HTTPException(status_code=404, detail="Workspace not found.")
from app.repositories.workspace_repository import WorkspaceRepository
repo = WorkspaceRepository(db)
repo.soft_delete(workspace)
@router.post("/{workspace_id}/archive", response_model=WorkspaceResponse)
def archive_workspace(
workspace_id: UUID,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db),
):
"""Archive a workspace. It will no longer appear in active listings."""
service = WorkspaceService(db)
workspace = service.get_workspace(workspace_id)
if workspace is None:
raise HTTPException(status_code=404, detail="Workspace not found.")
if workspace.created_by != current_user.id:
raise HTTPException(status_code=403, detail="You do not have access to this workspace.")
from app.repositories.workspace_repository import WorkspaceRepository
repo = WorkspaceRepository(db)
return repo.archive(workspace)