Spaces:
Running
Running
| from __future__ import annotations | |
| from uuid import UUID | |
| from fastapi import APIRouter, Request, Response, status | |
| from app.brand.schemas import BrandKitCreate, BrandKitResponse | |
| from app.security.errors import ForbiddenError | |
| router = APIRouter(prefix="/v1/brand", tags=["brand"]) | |
| def _identity(request: Request) -> tuple[str, str]: | |
| context = request.state.auth | |
| if not context.workspace_id or not context.user_id: | |
| raise ForbiddenError | |
| return context.workspace_id, context.user_id | |
| async def create_brand_kit(request: Request, payload: BrandKitCreate) -> BrandKitResponse: | |
| workspace_id, user_id = _identity(request) | |
| kit, version = await request.app.state.container.brand_kits.create_brand_kit( | |
| workspace_id=workspace_id, | |
| name=payload.name, | |
| description=payload.description, | |
| user_id=user_id, | |
| ) | |
| latest = await request.app.state.container.brand_kits.get_brand_kit_version( | |
| workspace_id=workspace_id, | |
| brand_kit_id=kit.id, | |
| user_id=user_id, | |
| ) | |
| return BrandKitResponse( | |
| id=kit.id, | |
| name=kit.name, | |
| description=kit.description, | |
| status=kit.status, | |
| is_default=kit.is_default, | |
| active_version_id=latest.id, | |
| created_at=kit.created_at.isoformat(), | |
| updated_at=kit.updated_at.isoformat(), | |
| ) | |
| async def list_brand_kits(request: Request) -> list[BrandKitResponse]: | |
| workspace_id, user_id = _identity(request) | |
| kits = await request.app.state.container.brand_kits.list_brand_kits( | |
| workspace_id=workspace_id, | |
| user_id=user_id, | |
| ) | |
| response: list[BrandKitResponse] = [] | |
| for kit in kits: | |
| try: | |
| latest = await request.app.state.container.brand_kits.get_brand_kit_version( | |
| workspace_id=workspace_id, | |
| brand_kit_id=kit.id, | |
| user_id=user_id, | |
| ) | |
| active_version_id = latest.id | |
| except Exception: | |
| active_version_id = kit.active_version_id | |
| response.append(BrandKitResponse( | |
| id=kit.id, | |
| name=kit.name, | |
| description=kit.description, | |
| status=kit.status, | |
| is_default=kit.is_default, | |
| active_version_id=active_version_id, | |
| created_at=kit.created_at.isoformat(), | |
| updated_at=kit.updated_at.isoformat(), | |
| )) | |
| return response | |
| async def update_brand_kit(request: Request, brand_kit_id: UUID, payload: BrandKitCreate) -> BrandKitResponse: | |
| workspace_id, user_id = _identity(request) | |
| version = await request.app.state.container.brand_kits.update_brand_kit( | |
| workspace_id=workspace_id, | |
| brand_kit_id=str(brand_kit_id), | |
| user_id=user_id, | |
| data=payload.initial_version, | |
| ) | |
| kit = await request.app.state.container.brand_kits.get_brand_kit(workspace_id, str(brand_kit_id), user_id=user_id) | |
| return BrandKitResponse( | |
| id=kit.id, | |
| name=kit.name, | |
| description=kit.description, | |
| status=kit.status, | |
| is_default=kit.is_default, | |
| active_version_id=version.id, | |
| created_at=kit.created_at.isoformat(), | |
| updated_at=kit.updated_at.isoformat(), | |
| ) | |
| async def delete_brand_kit(request: Request, brand_kit_id: UUID) -> Response: | |
| workspace_id, user_id = _identity(request) | |
| await request.app.state.container.brand_kits.delete_brand_kit( | |
| workspace_id=workspace_id, | |
| brand_kit_id=str(brand_kit_id), | |
| user_id=user_id, | |
| ) | |
| return Response(status_code=status.HTTP_204_NO_CONTENT) | |