76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.orm import Session
|
|
import json
|
|
|
|
from ..config.database import get_db
|
|
from ..config.logging_config import get_logger
|
|
from ..models.page_content import PageContent, PageType
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
router = APIRouter(prefix="/about", tags=["about"])
|
|
|
|
|
|
def serialize_page_content(content: PageContent) -> dict:
|
|
"""Serialize PageContent model to dictionary"""
|
|
return {
|
|
"id": content.id,
|
|
"page_type": content.page_type.value,
|
|
"title": content.title,
|
|
"subtitle": content.subtitle,
|
|
"description": content.description,
|
|
"content": content.content,
|
|
"meta_title": content.meta_title,
|
|
"meta_description": content.meta_description,
|
|
"meta_keywords": content.meta_keywords,
|
|
"og_title": content.og_title,
|
|
"og_description": content.og_description,
|
|
"og_image": content.og_image,
|
|
"canonical_url": content.canonical_url,
|
|
"story_content": content.story_content,
|
|
"values": json.loads(content.values) if content.values else None,
|
|
"features": json.loads(content.features) if content.features else None,
|
|
"about_hero_image": content.about_hero_image,
|
|
"mission": content.mission,
|
|
"vision": content.vision,
|
|
"team": json.loads(content.team) if content.team else None,
|
|
"timeline": json.loads(content.timeline) if content.timeline else None,
|
|
"achievements": json.loads(content.achievements) if content.achievements else None,
|
|
"is_active": content.is_active,
|
|
"created_at": content.created_at.isoformat() if content.created_at else None,
|
|
"updated_at": content.updated_at.isoformat() if content.updated_at else None,
|
|
}
|
|
|
|
|
|
@router.get("/")
|
|
async def get_about_content(
|
|
db: Session = Depends(get_db)
|
|
):
|
|
"""Get about page content"""
|
|
try:
|
|
content = db.query(PageContent).filter(PageContent.page_type == PageType.ABOUT).first()
|
|
|
|
if not content:
|
|
return {
|
|
"status": "success",
|
|
"data": {
|
|
"page_content": None
|
|
}
|
|
}
|
|
|
|
content_dict = serialize_page_content(content)
|
|
|
|
return {
|
|
"status": "success",
|
|
"data": {
|
|
"page_content": content_dict
|
|
}
|
|
}
|
|
except Exception as e:
|
|
logger.error(f"Error fetching about content: {str(e)}", exc_info=True)
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=f"Error fetching about content: {str(e)}"
|
|
)
|
|
|