chat-faq / sync.py
AnnasBlackHat's picture
add func to embed question
58f8884
import firebase_admin
from firebase_admin import credentials, firestore
import pymongo
from datetime import datetime
import os
# Initialize the Firebase app
cred = credentials.Certificate('serviceAccountKey.json')
firebase_admin.initialize_app(cred)
db = firestore.client()
# Connect to MongoDB
db_user = os.environ['DB_USER']
db_pass = os.environ['DB_PASS']
db_uri = f"mongodb+srv://{db_user}:{db_pass}@cluster0.firly.gcp.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0"
mongo_client = pymongo.MongoClient(db_uri)
mongo_db = mongo_client["chat_support"]
mongo_collection = mongo_db["faq"]
# Fetch the last sync timestamp from MongoDB
# last_sync_doc = mongo_db["log"].find_one({"key": "last_sync_faq_from_firebase"})
# if last_sync_doc:
# last_sync_timestamp = last_sync_doc["value"]["$numberLong"]
# else:
# last_sync_timestamp = 0
last_sync_doc = mongo_db["log"].find_one({"key": "last_sync_faq_from_firebase"})
if last_sync_doc:
last_sync_timestamp = int(last_sync_doc["value"])
else:
last_sync_timestamp = 0
# Fetch data from Firebase Firestore
firestore_collection = db.collection("quick-reply")
docs = firestore_collection.where("timeModified", ">", last_sync_timestamp).stream()
print(f'lastSync: {last_sync_timestamp} | docs: {type(docs)}')
# # Insert/Update data in MongoDB
for doc in docs:
doc_dict = doc.to_dict()
doc_dict["_id"] = doc.id
doc_dict["title"] = doc.get("shortcut")
print(doc.id, doc.get("shortcut"))
mongo_collection.replace_one({"_id": doc.id}, doc_dict, upsert=True)
# Update the last sync timestamp in MongoDB
current_timestamp = datetime.now().timestamp() * 1000
# mongo_db["log"].replace_one(
# {"key": "last_sync_faq_from_firebase"},
# {"key": "last_sync_faq_from_firebase", "value": {"$numberLong": str(int(current_timestamp))}},
# upsert=True
# )
mongo_db["log"].replace_one(
{"key": "last_sync_faq_from_firebase"},
{"key": "last_sync_faq_from_firebase", "value": current_timestamp},
upsert=True
)