| | """
|
| | MongoDB Database Connection Manager
|
| | Author: AI Generated
|
| | Created: 2025-11-24
|
| | Purpose: Handle MongoDB connection and collection access
|
| | """
|
| |
|
| | from pymongo import MongoClient
|
| | from pymongo.database import Database
|
| | from pymongo.collection import Collection
|
| | from config import settings
|
| |
|
| |
|
| | class DatabaseManager:
|
| | """Singleton MongoDB connection manager"""
|
| |
|
| | _instance = None
|
| | _client: MongoClient = None
|
| | _db: Database = None
|
| |
|
| | def __new__(cls):
|
| | if cls._instance is None:
|
| | cls._instance = super().__new__(cls)
|
| | return cls._instance
|
| |
|
| | def __init__(self):
|
| | if self._client is None:
|
| | self.connect()
|
| |
|
| | @property
|
| | def client(self):
|
| | """Get MongoDB client"""
|
| | return self._client
|
| |
|
| | @property
|
| | def db_name(self):
|
| | """Get database name"""
|
| | return settings.DB_NAME
|
| |
|
| | def connect(self):
|
| | """Establish connection to MongoDB"""
|
| | self._client = MongoClient(settings.MONGODB_URI)
|
| | self._db = self._client[settings.DB_NAME]
|
| | print(f"✓ Connected to MongoDB: {settings.DB_NAME}")
|
| |
|
| | def get_collection(self, collection_name: str) -> Collection:
|
| | """Get a MongoDB collection"""
|
| | return self._db[collection_name]
|
| |
|
| | def close(self):
|
| | """Close MongoDB connection"""
|
| | if self._client:
|
| | self._client.close()
|
| | print("✓ MongoDB connection closed")
|
| |
|
| |
|
| | @property
|
| | def users(self) -> Collection:
|
| | """User collection (contains embedded UserFollows array)"""
|
| | return self.get_collection(settings.COLLECTION_USERS)
|
| |
|
| | @property
|
| | def payments(self) -> Collection:
|
| | """Payment collection"""
|
| | return self.get_collection(settings.COLLECTION_PAYMENTS)
|
| |
|
| | @property
|
| | def event_versions(self) -> Collection:
|
| | """EventVersion collection"""
|
| | return self.get_collection(settings.COLLECTION_EVENT_VERSIONS)
|
| |
|
| | @property
|
| | def post_social_media(self) -> Collection:
|
| | """PostSocialMedia collection (contains nested Images.UserCommentPosts)"""
|
| | return self.get_collection(settings.COLLECTION_POST_SOCIAL_MEDIA)
|
| |
|
| |
|
| | @property
|
| | def audience_segments(self) -> Collection:
|
| | """AudienceSegment collection (DEPRECATED - use event_audience_segments)"""
|
| | return self.get_collection(settings.COLLECTION_AUDIENCE_SEGMENTS)
|
| |
|
| | @property
|
| | def user_segment_assignments(self) -> Collection:
|
| | """UserSegmentAssignment collection"""
|
| | return self.get_collection(settings.COLLECTION_USER_SEGMENT_ASSIGNMENTS)
|
| |
|
| | @property
|
| | def sentiment_results(self) -> Collection:
|
| | """SentimentAnalysisResult collection"""
|
| | return self.get_collection(settings.COLLECTION_SENTIMENT_RESULTS)
|
| |
|
| | @property
|
| | def event_insights(self) -> Collection:
|
| | """EventInsightReport collection"""
|
| | return self.get_collection(settings.COLLECTION_EVENT_INSIGHTS)
|
| |
|
| |
|
| | @property
|
| | def event_audience_segments(self) -> Collection:
|
| | """EventAudienceSegment collection"""
|
| | return self.get_collection("EventAudienceSegment")
|
| |
|
| | @property
|
| | def event_sentiment_summary(self) -> Collection:
|
| | """EventSentimentSummary collection"""
|
| | return self.get_collection("EventSentimentSummary")
|
| |
|
| |
|
| |
|
| | db = DatabaseManager()
|
| |
|