Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 25 additions & 7 deletions backend/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,41 @@
from services.reminder_scheduler import start_scheduler
from services.complexity_analyzer import analyze_code
from social import share_to_platforms
from services.credential_service import resolve_user_credentials
from models.user import PlatformCredential
from utils.crypto import encrypt

load_dotenv()

logger = logging.getLogger("leetcodeai")

# -----------------------------
# MongoDB Setup
# -----------------------------
mongo_client = motor.motor_asyncio.AsyncIOMotorClient(os.getenv("MONGODB_URI"))
db = mongo_client.leetcodeai


@asynccontextmanager
async def lifespan(app: FastAPI):
"""
Start background schedulers when server starts.
Start background schedulers and initialize MongoDB indexes when server starts.
"""
try:
# Create indexes to prevent COLLSCAN on dashboard queries
await db.problem_info.create_index(
[("user_email", 1), ("date", -1)],
background=True
)
await db.users.create_index(
[("email", 1)],
unique=True,
background=True
)
print("MongoDB indexes ensured successfully.")
except Exception as e:
logger.error(f"Failed to create MongoDB indexes: {e}")

try:
start_scheduler()
print("Reminder scheduler started successfully.")
Expand Down Expand Up @@ -94,12 +118,6 @@ async def mongodb_exception_handler(request: Request, exc: PyMongoError):
# -----------------------------
twilio_client = Client(os.getenv("TWILIO_ACCOUNT_SID"), os.getenv("TWILIO_AUTH_TOKEN"))

# -----------------------------
# MongoDB Setup
# -----------------------------
mongo_client = motor.motor_asyncio.AsyncIOMotorClient(os.getenv("MONGODB_URI"))

db = mongo_client.leetcodeai


# -----------------------------
Expand Down