File size: 2,016 Bytes
6998881
 
be25939
 
 
 
 
24f7733
be25939
17763c2
be25939
 
 
 
17763c2
 
 
 
 
 
 
 
be25939
 
17763c2
 
 
 
 
be25939
 
 
 
 
 
 
 
 
17763c2
 
be25939
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import firebase_admin
from firebase_admin import credentials
from flask import Flask
from flask_pymongo import PyMongo
from flask_bcrypt import Bcrypt
from flask_cors import CORS
from dotenv import load_dotenv
from io import StringIO
import os
import json

# Extensions
mongo = PyMongo()
bcrypt = Bcrypt()
# Load Firebase credentials from Hugging Face secret
firebase_creds = os.environ.get("FIREBASE_CREDENTIALS")

if firebase_creds:
    cred_dict = json.loads(firebase_creds)
    cred = credentials.Certificate(cred_dict)
else:
    cred = credentials.Certificate("serviceAccountKey.json")  # fallback for local

def create_app():
    dotenv_content = os.environ.get("DOTENV_FILE")
    if dotenv_content:
        load_dotenv(stream=StringIO(dotenv_content))  # load from Hugging Face secret
    else:
        load_dotenv()
    app = Flask(__name__)
    
    # Configuration
    app.config["MONGO_URI"] = os.getenv("MONGODB_URI")
    app.config["SECRET_KEY"] = os.getenv("SECRET_KEY", "your-secret-key-change-in-production")
    
    # Initialize extensions
    mongo.init_app(app)
    bcrypt.init_app(app)
    if not firebase_admin._apps:
        firebase_admin.initialize_app(cred)
    CORS(app, supports_credentials=True)
    
    # Register Blueprints - Import inside function to avoid circular imports
    from app.routes.auth_routes import auth_bp
    app.register_blueprint(auth_bp, url_prefix="/api/auth")
    
    from app.routes.user_routes import user_bp
    app.register_blueprint(user_bp, url_prefix="/api/users")
    
    # from app.routes.product_routes import product_bp
    # app.register_blueprint(product_bp, url_prefix="/api/products")
    # from app.routes.cart_routes import cart_bp
    # app.register_blueprint(cart_bp, url_prefix="/api/cart")
    # from app.routes.order_routes import order_bp
    # app.register_blueprint(order_bp, url_prefix="/api/order")
    # from app.routes.admin_routes import admin_bp
    # app.register_blueprint(admin_bp, url_prefix="/api/admin")
    
    return app