91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
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)
|