1+ import os
2+ from typing import Optional
3+ from fastapi import FastAPI , Depends , HTTPException , status
4+ from fastapi .middleware .cors import CORSMiddleware
5+ from fastapi .security import OAuth2PasswordBearer , OAuth2PasswordRequestForm
6+ from sqlalchemy .orm import Session
7+ from sqlalchemy import create_engine
8+ from sqlalchemy .ext .declarative import declarative_base
9+ from sqlalchemy .orm import sessionmaker
10+ import models
11+ import schemas
12+ from routers import auth , api
13+ from utils .auth_utils import create_access_token
14+ import bcrypt
15+ import jwt
16+ from dotenv import load_dotenv
17+ 18+ # Initialize FastAPI application
19+ app = FastAPI ()
20+ 21+ # Load environment variables
22+ load_dotenv ()
23+ DATABASE_URL = os .getenv ("DATABASE_URL" )
24+ SECRET_KEY = os .getenv ("JWT_SECRET_KEY" )
25+ 26+ # Add CORS middleware for development
27+ app .add_middleware (
28+ CORSMiddleware ,
29+ allow_origins = ["*" ],
30+ allow_credentials = True ,
31+ allow_methods = ["*" ],
32+ allow_headers = ["*" ],
33+ )
34+ 35+ # Database setup
36+ engine = create_engine (DATABASE_URL )
37+ SessionLocal = sessionmaker (autocommit = False , autoflush = False , bind = engine )
38+ Base = declarative_base ()
39+ 40+ # Include routers for authentication and API calls
41+ app .include_router (auth .router )
42+ app .include_router (api .router )
43+ 44+ # Database dependency function
45+ def get_db ():
46+ db = SessionLocal ()
47+ try :
48+ yield db
49+ finally :
50+ db .close ()
51+ 52+ # Startup event for creating tables
53+ @app .on_event ("startup" )
54+ async def startup ():
55+ Base .metadata .create_all (bind = engine )
0 commit comments