Spaces:
Sleeping
Sleeping
| 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") |