ALYYAN's picture
Gradio UI added
b383602
# app/database.py
import os
from motor.motor_asyncio import AsyncIOMotorClient
from dotenv import load_dotenv
import datetime
from typing import List, Dict
# Load environment variables from .env file
load_dotenv()
# --- Database Connection ---
# Get the connection string from the environment variables
MONGODB_URL = os.getenv("MONGODB_CONNECTION_STRING")
if not MONGODB_URL:
raise ValueError("MONGODB_CONNECTION_STRING not found in environment variables. Please check your .env file.")
# Create a client instance
client = AsyncIOMotorClient(MONGODB_URL)
# Get a handle to the database (it will be created if it doesn't exist)
# The database name 'pneumonia_db' should match the one in your connection string
database = client.pneumonia_db
# Get a handle to the collection (like a table in SQL)
patient_collection = database.get_collection("patient_records")
# --- Database Operations (now async) ---
async def add_patient_record(name: str, age: int, result: str, confidence: float) -> Dict:
"""
Inserts a new patient record into the MongoDB collection.
Returns the inserted document.
"""
record_document = {
"name": name,
"age": age,
"prediction_result": result,
"confidence_score": confidence,
"timestamp": datetime.datetime.utcnow()
}
# .insert_one is an async operation, so we must 'await' it
result = await patient_collection.insert_one(record_document)
# Find the newly created document to return it
new_record = await patient_collection.find_one({"_id": result.inserted_id})
return new_record
async def get_all_records() -> List[Dict]:
"""
Retrieves all patient records, sorted by the most recent timestamp.
"""
records = []
# .find() returns a cursor, which we iterate over asynchronously
cursor = patient_collection.find({}).sort("timestamp", -1) # -1 for descending order
async for document in cursor:
records.append(document)
return records