Skip to content

Commit a024234

Browse files
committed
refactor: modularize app initialization and database setup
1 parent 9fd936c commit a024234

5 files changed

Lines changed: 66 additions & 62 deletions

File tree

backend/app/__init__.py

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +0,0 @@
1-
from os import getenv
2-
3-
from fastapi import FastAPI
4-
from fastapi.middleware.cors import CORSMiddleware
5-
from sqlalchemy import create_engine
6-
from sqlalchemy.ext.declarative import declarative_base
7-
from sqlalchemy.orm import sessionmaker
8-
from dotenv import load_dotenv
9-
10-
from app.core.middleware import LoggingAndPerformanceMiddleware
11-
12-
load_dotenv()
13-
14-
DATABASE_URL = getenv("DATABASE_URL")
15-
if not DATABASE_URL:
16-
raise ValueError("DATABASE_URL is not set in environment variables.")
17-
18-
engine = create_engine(DATABASE_URL)
19-
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
20-
Base = declarative_base()
21-
22-
Base.metadata.create_all(bind=engine)
23-
print("✅ Tables created successfully.")
24-
25-
26-
def get_db():
27-
db = SessionLocal()
28-
try:
29-
yield db
30-
finally:
31-
db.close()
32-
33-
34-
def create_app():
35-
app = FastAPI()
36-
37-
app.add_middleware(LoggingAndPerformanceMiddleware)
38-
app.add_middleware(
39-
CORSMiddleware,
40-
allow_origins=[
41-
"http://localhost:3000",
42-
"https://job-fit-ai.vercel.app"
43-
],
44-
allow_credentials=True,
45-
allow_methods=["*"],
46-
allow_headers=["*"],
47-
)
48-
49-
Base.metadata.create_all(bind=engine)
50-
51-
from app.routes.auth import router as auth_router
52-
from app.routes.cheatsheet import router as cheatsheet_router
53-
from app.routes.user import router as user_router
54-
from app.routes.health import router as health_router
55-
56-
app.include_router(auth_router, prefix="/auth")
57-
app.include_router(cheatsheet_router, prefix="/cheatsheet")
58-
app.include_router(user_router, prefix="/user")
59-
app.include_router(health_router, prefix="/health")
60-
61-
return app

backend/app/core/config.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import os
2+
from dotenv import load_dotenv
3+
4+
load_dotenv()
5+
6+
DATABASE_URL = os.getenv("DATABASE_URL")
7+
if not DATABASE_URL:
8+
raise ValueError("DATABASE_URL is not set in environment variables.")

backend/app/db/session.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from sqlalchemy import create_engine
2+
from sqlalchemy.ext.declarative import declarative_base
3+
from sqlalchemy.orm import sessionmaker
4+
from contextlib import contextmanager
5+
from app.core.config import DATABASE_URL
6+
7+
engine = create_engine(DATABASE_URL)
8+
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
9+
Base = declarative_base()
10+
11+
def get_db():
12+
db = SessionLocal()
13+
try:
14+
yield db
15+
finally:
16+
db.close()
17+
18+
@contextmanager
19+
def get_db_session():
20+
db = SessionLocal()
21+
try:
22+
yield db
23+
finally:
24+
db.close()

backend/app/run.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from fastapi import FastAPI
2+
from fastapi.middleware.cors import CORSMiddleware
3+
from app.core.middleware import LoggingAndPerformanceMiddleware
4+
from app.db.session import Base, engine
5+
from app.routes.auth import router as auth_router
6+
from app.routes.cheatsheet import router as cheatsheet_router
7+
from app.routes.user import router as user_router
8+
from app.routes.health import router as health_router
9+
10+
def create_app():
11+
app = FastAPI()
12+
13+
app.add_middleware(LoggingAndPerformanceMiddleware)
14+
15+
app.add_middleware(
16+
CORSMiddleware,
17+
allow_origins=[
18+
"http://localhost:3000",
19+
"https://job-fit-ai.vercel.app"
20+
],
21+
allow_credentials=True,
22+
allow_methods=["*"],
23+
allow_headers=["*"],
24+
)
25+
26+
app.include_router(auth_router, prefix="/auth")
27+
app.include_router(cheatsheet_router, prefix="/cheatsheet")
28+
app.include_router(user_router, prefix="/user")
29+
app.include_router(health_router, prefix="/health")
30+
31+
Base.metadata.create_all(bind=engine)
32+
33+
return app

backend/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from app import create_app
1+
from app.run import create_app
22

33
app = create_app()
44

0 commit comments

Comments
 (0)