freeleaps-service-hub/apps/content/backend/content/content_service.py

47 lines
2.2 KiB
Python

import asyncio
from typing import List, Optional
from datetime import datetime, timedelta, timezone
from .models import ContentDirectory, ContentFolderDoc
from common.constants.region import UserRegion
from backend.document.document_manager import DocumentManager
from .content_sharepoint_manager import ContentSharePointManager
from backend.content.constants import ContentSource
from common.log.module_logger import ModuleLogger
class ContentService:
def __init__(self) -> None:
self.module_logger = ModuleLogger(sender_id="ContentService")
async def retrieve_content_directories_for_folder(
self, folder_name: str, region: UserRegion
) -> List[ContentDirectory]:
await self.module_logger.log_info(f"Retrieving content directories for folder: {folder_name}, region: {region.name}")
folder = (
await ContentFolderDoc.find(
ContentFolderDoc.folder_name == folder_name,
ContentFolderDoc.region == region,
)
.sort(-ContentFolderDoc.udpate_time)
.first_or_none()
)
if folder is None or folder.valid_thru.replace(
tzinfo=timezone.utc
) < datetime.now(timezone.utc):
await self.module_logger.log_info(f"Folder cache expired or not found, fetching from SharePoint: {folder_name}")
folder = await ContentSharePointManager().retrieve_directories_for_folder(
folder_name=folder_name, region=region
)
result = folder.content_directories if folder else None
await self.module_logger.log_info(f"Successfully retrieved {len(result) if result else 0} content directories for folder: {folder_name}")
return result
async def retrieve_content_as_media_data(self, document_id: str) -> Optional[str]:
await self.module_logger.log_info(f"Retrieving content as media data for document ID: {document_id}")
document_manager = DocumentManager()
result = await document_manager.retrieve_document_as_http_media(document_id)
await self.module_logger.log_info(f"Successfully retrieved media data for document ID: {document_id}")
return result