deepfake-detection-api / app /database.py
Sectumsempra1402's picture
Initial deploy: FastAPI deepfake detection API
f827a8b
import os
import logging
from typing import Optional
from bson import ObjectId
from motor.motor_asyncio import AsyncIOMotorClient
logger = logging.getLogger(__name__)
_client: Optional[AsyncIOMotorClient] = None
_db = None
async def connect():
global _client, _db
uri = os.getenv("MONGODB_URI")
if not uri:
logger.warning("MONGODB_URI not set — MongoDB writes disabled")
return
db_name = os.getenv("MONGODB_DB_NAME", "myapp")
_client = AsyncIOMotorClient(uri)
_db = _client[db_name]
logger.info("Connected to MongoDB database '%s'", db_name)
async def disconnect():
global _client
if _client:
_client.close()
async def update_deepfake_result(post_id: str, image_index: int, is_deepfake: bool) -> None:
"""Write the boolean deepfake result back into the post's image_deepfake_results array."""
if _db is None:
logger.debug("MongoDB not connected; skipping write for post %s[%d]", post_id, image_index)
return
try:
field = f"image_deepfake_results.{image_index}"
result = await _db.posts.update_one(
{"_id": ObjectId(post_id)},
{"$set": {field: is_deepfake}},
)
if result.matched_count == 0:
logger.warning("Post %s not found; deepfake result not saved", post_id)
except Exception:
logger.exception("Failed to update deepfake result for post %s[%d]", post_id, image_index)