ShehryarAppsWork's picture
Upload FirebaseDB.py
4457bcb verified
import firebase_admin
from firebase_admin import credentials, firestore
import bcrypt
from datetime import datetime
class firebaseDB:
def __init__(self):
cred = credentials.Certificate("key.json")
if not firebase_admin._apps:
firebase_admin.initialize_app(cred)
self.db = firestore.client()
self.userid = None # Now this is the email
self.name = None
self.email = None
self.password = None
self.companyname = None
self.latest_form_id = None
self.form_count = None
def hash_password(self, password):
salt = bcrypt.gensalt()
hashed = bcrypt.hashpw(password.encode('utf-8'), salt)
return hashed.decode('utf-8')
def new_user(self, name, email, password, companyname):
hashed_password = self.hash_password(password)
self.userid = email
self.name = name
self.email = email
self.password = hashed_password
self.companyname = companyname
self.latest_form_id = None
self.form_count = 0
self.db.collection("users").document(email).set({
"name": name,
"email": email,
"password": hashed_password,
"company_name": companyname,
"latest_form_id": None,
"form_count": 0
})
def get_user(self, email, password):
doc = self.db.collection("users").document(email).get()
if doc.exists:
data = doc.to_dict()
stored_hash = data.get("password")
if bcrypt.checkpw(password.encode('utf-8'), stored_hash.encode('utf-8')):
self.userid = email
self.name = data.get("name")
self.email = email
self.password = stored_hash
self.companyname = data.get("company_name")
self.latest_form_id = data.get("latest_form_id")
self.form_count = data.get("form_count")
return True
return False
def add_form(self, qa_dict):
if not self.userid:
print("User not loaded. Please authenticate first.")
return
user_ref = self.db.collection("users").document(self.userid)
user_doc = user_ref.get()
if not user_doc.exists:
print(f"User with ID '{self.userid}' does not exist. Form not added.")
return
# Get current form count
user_data = user_doc.to_dict()
current_count = user_data.get("form_count") or 0
new_form_id = f"form_{current_count + 1}"
# Add form data with date_created
self.db.collection("forms").document(new_form_id).set({
"userid": self.userid,
"formid": new_form_id,
"qa_responses": qa_dict,
"date_created": firestore.SERVER_TIMESTAMP # This will set the current time
})
# Update user metadata
user_ref.update({
"latest_form_id": new_form_id,
"form_count": current_count + 1
})
print(f"Form '{new_form_id}' added successfully for user '{self.userid}'")
def update_form(self, formid, updated_qa_dict):
if not self.userid:
print("User not loaded. Please authenticate first.")
return
form_ref = self.db.collection("forms").document(formid)
form_doc = form_ref.get()
if not form_doc.exists:
print(f"Form with ID '{formid}' does not exist.")
return
form_data = form_doc.to_dict()
if form_data.get("userid") != self.userid:
print(f"Form ID '{formid}' does not belong to user '{self.userid}'.")
return
form_ref.update({
"qa_responses": updated_qa_dict
})
print(f"Form '{formid}' successfully updated for user '{self.userid}'")
def get_forms_by_user(self, userid):
forms_ref = self.db.collection("forms")
query = forms_ref.where("userid", "==", userid)
results = query.stream()
forms = []
for doc in results:
form_data = doc.to_dict()
forms.append(form_data)
return forms
def delete_form_by_user_and_formid(self, user_id, form_id):
# Check if user exists
user_ref = self.db.collection("users").document(user_id)
user_doc = user_ref.get()
if not user_doc.exists:
print(f"User with ID '{user_id}' does not exist. Cannot delete form.")
return
# Query for the form to delete
forms_ref = self.db.collection("forms")
query = forms_ref.where("userid", "==", user_id).where("formid", "==", form_id)
results = query.stream()
found = False
for doc in results:
doc.reference.delete()
print(f"Deleted form with ID: {doc.id}")
found = True
if not found:
print(f"No form found for user '{user_id}' with form_id '{form_id}'")
def delete_all_user_data(self, user_id):
# 1. Delete all forms for the user
forms_ref = self.db.collection("forms")
form_query = forms_ref.where("userid", "==", user_id)
form_results = form_query.stream()
form_count = 0
for doc in form_results:
doc.reference.delete()
form_count += 1
print(f"Deleted {form_count} form(s) for user '{user_id}'")
# 2. Delete user document
user_ref = self.db.collection("users").document(user_id)
if user_ref.get().exists:
user_ref.delete()
print(f"Deleted user '{user_id}'")
else:
print(f"User '{user_id}' not found")