57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
|
|
from app.core.dependencies import require_admin
|
|
from app.modules.content.schemas import ContentPageIn, ContentPagePatchIn
|
|
from app.modules.content.service import (
|
|
create_page,
|
|
delete_page,
|
|
get_page_by_slug,
|
|
list_all_pages,
|
|
list_published_pages,
|
|
page_exists,
|
|
page_to_dict,
|
|
update_page,
|
|
)
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/pages")
|
|
async def list_pages_route():
|
|
pages = list_published_pages()
|
|
return {"data": [page_to_dict(page) for page in pages]}
|
|
|
|
|
|
@router.get("/pages/manage/all")
|
|
async def list_all_pages_route(_admin=Depends(require_admin)):
|
|
pages = list_all_pages()
|
|
return {"data": [page_to_dict(page) for page in pages]}
|
|
|
|
|
|
@router.get("/pages/{slug}")
|
|
async def get_page_route(slug: str):
|
|
page = get_page_by_slug(slug)
|
|
if not page:
|
|
raise HTTPException(status_code=404, detail="PAGE_NOT_FOUND")
|
|
return page_to_dict(page)
|
|
|
|
|
|
@router.post("/pages")
|
|
async def create_page_route(payload: ContentPageIn, admin=Depends(require_admin)):
|
|
page = create_page(payload.slug, payload.title, payload.body, payload.status, admin.id)
|
|
return page_to_dict(page)
|
|
|
|
|
|
@router.patch("/pages/{page_id}")
|
|
async def update_page_route(page_id: str, payload: ContentPagePatchIn, _admin=Depends(require_admin)):
|
|
if not page_exists(page_id):
|
|
raise HTTPException(status_code=404, detail="PAGE_NOT_FOUND")
|
|
page = update_page(page_id, payload.title, payload.body, payload.status)
|
|
return page_to_dict(page)
|
|
|
|
|
|
@router.delete("/pages/{page_id}")
|
|
async def delete_page_route(page_id: str, _admin=Depends(require_admin)):
|
|
delete_page(page_id)
|
|
return {"message": "deleted"}
|