File size: 1,896 Bytes
1cff1e5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5837391
 
1cff1e5
5837391
1cff1e5
 
 
 
 
 
 
 
03faf26
 
 
 
 
 
 
 
 
 
 
1cff1e5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from motor.motor_asyncio import AsyncIOMotorClient
import redis.asyncio as aioredis
from config import get_settings

settings = get_settings()

# MongoDB Atlas
mongo_client: AsyncIOMotorClient = None
db = None

# Redis
redis_client: aioredis.Redis = None


async def connect_db():
    """Initialize MongoDB and Redis connections."""
    global mongo_client, db, redis_client

    # MongoDB Atlas
    mongo_client = AsyncIOMotorClient(settings.MONGO_URI)
    db = mongo_client[settings.MONGO_DB_NAME]

    # Create indexes
    await db.users.create_index("email", unique=True)
    await db.resumes.create_index("user_id", unique=True)
    await db.skills.create_index("user_id")
    await db.sessions.create_index("user_id")
    await db.results.create_index("session_id")
    await db.results.create_index("user_id")
    await db.answers.create_index("user_id")
    await db.answers.create_index("session_id")
    await db.questions.create_index("role_id")
    await db.jd_verifications.create_index([("user_id", 1), ("cache_key", 1)])

    # Redis
    redis_client = aioredis.from_url(
        settings.REDIS_URL,
        decode_responses=True,
    )

    # Test connections
    try:
        await mongo_client.admin.command("ping")
        print("✅ Connected to MongoDB Atlas")
    except Exception as e:
        print(f"❌ Failed to connect to MongoDB: {e}")

    try:
        await redis_client.ping()
        print("✅ Connected to Redis")
    except Exception as e:
        print(f"⚠️ Failed to connect to Redis (URL might be invalid or unreachable): {e}")


async def close_db():
    """Close database connections."""
    global mongo_client, redis_client
    if mongo_client:
        mongo_client.close()
    if redis_client:
        await redis_client.close()
    print("🔌 Database connections closed")


def get_db():
    return db


def get_redis():
    return redis_client