genai-for-marketing/backend_apis/app/utils_firebase.py (71 lines of code) (raw):
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Utility module for Firestore.
"""
import firebase_admin
from firebase_admin import firestore,credentials, auth
import os
from .body_schema import Campaign, CampaignList
import json
import tomllib
import google.oauth2.id_token
import google.auth.transport.requests
#Auth Request
HTTP_REQUEST = google.auth.transport.requests.Request()
# Load configuration file
with open("/app/config.toml", "rb") as f:
config = tomllib.load(f)
# Application Default credentials are automatically created.
app = firebase_admin.initialize_app()
db = firestore.client()
def to_serializable(val):
if hasattr(val, '__dict__'):
return val.__dict__
return val
def verify_auth_token(id_token):
# Verify Firebase auth.
claims = google.oauth2.id_token.verify_firebase_token(
id_token, HTTP_REQUEST, audience=os.environ.get("GOOGLE_CLOUD_PROJECT")
)
if not claims:
return "000"
user_id = claims['sub']
friendly_id = claims.get("name", claims.get("email", "Unknown"))
print(friendly_id)
return user_id
def create_campaign(user_id,campaign:Campaign):
user_ref = db.collection("users").document(user_id)
if user_ref.get().exists:
print("Found user")
print(json.dumps(campaign.__dict__,default=to_serializable))
update_time, campaign_ref = user_ref.collection("campaigns").add(json.loads(json.dumps(campaign.__dict__,default=to_serializable)))
return update_time,campaign_ref.id
def read_campaign(user_id,campaign_id):
campaign_ref = db.collection("users").document(user_id).collection("campaigns").document(campaign_id)
camp = campaign_ref.get()
if camp.exists:
return camp.to_dict()
else:
return {}
def list_campaigns(user_id):
campaign_col = db.collection("users").document(user_id).collection("campaigns").stream()
list_campaigns = []
for campaign in campaign_col:
camp_dict = campaign.to_dict()
print(camp_dict)
list_campaigns.append(CampaignList(id=campaign.id,data=Campaign(**camp_dict)))
return list_campaigns
def update_campaign(user_id,campaign_id,data:Campaign):
camp_ref = db.collection("users").document(user_id).collection("campaigns").document(campaign_id)
if camp_ref.get().exists:
print("Updating Campaign")
camp_ref.set(json.loads(json.dumps(data.__dict__,default=to_serializable)))
return f"{campaign_id} Campaign is updated."
def update_status(user_id,campaign_id,key,status):
camp_ref = db.collection("users").document(user_id).collection("campaigns").document(campaign_id)
if camp_ref.get().exists:
if key == "":
camp_ref.update({"status" : status})
return f"{campaign_id} Campaign Status Updated."
print("Updating Status for",key)
camp_ref.update({key+".status" : status})
return f"{campaign_id} Campaign {key} is Activated."
def delete_campaign(user_id,campaign_id):
camp_ref = db.collection("users").document(user_id).collection("campaigns").document(campaign_id)
if camp_ref.get().exists:
print("Deleting Campaign")
camp_ref.delete()
return f"{campaign_id} Campaign is deleted."
return f"{campaign_id} Campaign does not exists."