first commit

This commit is contained in:
Chris
2026-03-23 20:23:58 +08:00
commit 74d612aca1
3193 changed files with 692056 additions and 0 deletions

View File

@@ -0,0 +1 @@
"""Editor API routers."""

View File

@@ -0,0 +1,90 @@
from fastapi import APIRouter, Depends, HTTPException, status
from app.api.dependencies.auth import get_access_token
from app.api.dependencies.permissions import require_permission
from app.application.editor.service import EditorService
from app.schemas.auth import AuthenticatedUser
from app.schemas.editor import (
BuildPreviewRequest,
BuildPreviewResponse,
EditorChangeListResponse,
EditorSessionCreateRequest,
EditorSessionRead,
EditorSessionUpdateRequest,
SaveVariantChangesRequest,
)
router = APIRouter()
service = EditorService()
@router.post("/sessions", response_model=EditorSessionRead)
async def create_editor_session(
request: EditorSessionCreateRequest,
current_user: AuthenticatedUser = Depends(require_permission("can_use_editor")),
) -> EditorSessionRead:
return await service.create_session(request, current_user)
@router.get("/sessions/{session_id}", response_model=EditorSessionRead)
async def get_editor_session(
session_id: str,
_: AuthenticatedUser = Depends(require_permission("can_use_editor")),
) -> EditorSessionRead:
item = await service.get_session(session_id)
if not item:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"Editor session '{session_id}' not found.",
)
return item
@router.patch("/sessions/{session_id}", response_model=EditorSessionRead)
async def update_editor_session(
session_id: str,
request: EditorSessionUpdateRequest,
_: AuthenticatedUser = Depends(require_permission("can_use_editor")),
) -> EditorSessionRead:
item = await service.update_session(session_id, request)
if not item:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"Editor session '{session_id}' not found.",
)
return item
@router.delete("/sessions/{session_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_editor_session(
session_id: str,
_: AuthenticatedUser = Depends(require_permission("can_use_editor")),
) -> None:
await service.delete_session(session_id)
@router.get("/variants/{variant_id}/changes", response_model=EditorChangeListResponse)
async def list_variant_changes(
variant_id: str,
_: AuthenticatedUser = Depends(require_permission("can_use_editor")),
access_token: str = Depends(get_access_token),
) -> EditorChangeListResponse:
return await service.list_changes_with_access_token(variant_id, access_token)
@router.put("/variants/{variant_id}/changes", response_model=EditorChangeListResponse)
async def save_variant_changes(
variant_id: str,
request: SaveVariantChangesRequest,
_: AuthenticatedUser = Depends(require_permission("can_use_editor")),
access_token: str = Depends(get_access_token),
) -> EditorChangeListResponse:
return await service.save_changes_with_access_token(variant_id, request, access_token)
@router.post("/previews/build", response_model=BuildPreviewResponse)
async def build_preview(
request: BuildPreviewRequest,
_: AuthenticatedUser = Depends(require_permission("can_use_editor")),
) -> BuildPreviewResponse:
return await service.build_preview(request)