File size: 2,312 Bytes
ef8461f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from pymongo import MongoClient
import os
from dotenv import load_dotenv

# Load biến môi trường
load_dotenv()

MONGO_URI = os.getenv("MONGO_URI")
DB_NAME = "SmartTourismDB"
COLLECTION_NAME = "Users"

def init_db():
    print("⏳ Đang kết nối MongoDB...")
    try:
        client = MongoClient(MONGO_URI)
        db = client[DB_NAME]
        
        # 1. Kiểm tra xem collection đã có chưa
        collection_names = db.list_collection_names()
        if COLLECTION_NAME not in collection_names:
            db.create_collection(COLLECTION_NAME)
            print(f"✅ Đã tạo Collection: {COLLECTION_NAME}")
        else:
            print(f"ℹ️ Collection {COLLECTION_NAME} đã tồn tại.")

        users_col = db[COLLECTION_NAME]

        # 2. DỌN DẸP INDEX CŨ (QUAN TRỌNG)
        # Vì chúng ta đổi logic index, cần xóa index cũ đi để tránh lỗi "IndexOptionsConflict"
        try:
            # Thử xóa index tên "unique_username_idx" (nếu bạn đã chạy script cũ)
            users_col.drop_index("unique_username_idx")
            print("🧹 Đã xóa index cũ 'unique_username_idx'.")
        except:
            # Nếu chưa có thì thôi, bỏ qua
            pass
            
        try:
            # Thử xóa index mặc định "username_1" (nếu có)
            users_col.drop_index("username_1")
            print("🧹 Đã xóa index cũ 'username_1'.")
        except:
            pass

        # 3. TẠO INDEX KÉP MỚI (COMPOUND INDEX)
        # Logic: Cặp (username + auth_provider) phải là duy nhất.
        # Ví dụ: ("a@gmail.com", "local") khác ("a@gmail.com", "google").
        
        index_name = users_col.create_index(
            [("username", 1), ("auth_provider", 1)], 
            unique=True, 
            name="unique_user_provider_idx"
        )
        
        print(f"✅ Đã tạo Index Kép (Username + Provider). Tên index: {index_name}")
        print("🎉 Database Auth đã sẵn sàng cho mô hình Tách Biệt Tài Khoản!")

    except Exception as e:
        print(f"❌ Lỗi: {e}")
    finally:
        client.close()

if __name__ == "__main__":
    if not MONGO_URI:
        print("❌ Lỗi: Chưa cấu hình MONGO_URI trong file .env")
    else:
        init_db()