diff --git a/README.md b/README.md index fc5a246..38a7d23 100644 --- a/README.md +++ b/README.md @@ -251,14 +251,14 @@ export default function App() { ``` --- -## 🗄️ Email Classification Database (Flask) +## 🗄️ Email Classification Database (FastAPI) -A MySQL-based system to store and manage classified email records. +A MySQL-based system to store and manage classified email records (located in `fastapi_backend/`). ### Database Setup ```bash -mysql -u root -p < backend/schema.sql +mysql -u root -p < fastapi_backend/schema.sql ``` ### API Endpoints diff --git a/backend/database.py b/fastapi_backend/database.py similarity index 100% rename from backend/database.py rename to fastapi_backend/database.py diff --git a/backend/emails.py b/fastapi_backend/emails.py similarity index 98% rename from backend/emails.py rename to fastapi_backend/emails.py index b31ea80..2c776a2 100644 --- a/backend/emails.py +++ b/fastapi_backend/emails.py @@ -1,6 +1,6 @@ from fastapi import APIRouter, HTTPException from pydantic import BaseModel -from backend.database import ( +from fastapi_backend.database import ( insert_email, mark_email, get_spam_emails, diff --git a/backend/export.py b/fastapi_backend/export.py similarity index 98% rename from backend/export.py rename to fastapi_backend/export.py index c96115c..6cc05bc 100644 --- a/backend/export.py +++ b/fastapi_backend/export.py @@ -3,7 +3,7 @@ from fpdf import FPDF from fastapi import APIRouter, HTTPException, Query from fastapi.responses import StreamingResponse -from backend.database import get_connection +from fastapi_backend.database import get_connection router = APIRouter(prefix="/api/emails", tags=["export"]) diff --git a/backend/main.py b/fastapi_backend/main.py similarity index 94% rename from backend/main.py rename to fastapi_backend/main.py index 1bfae2c..2749014 100644 --- a/backend/main.py +++ b/fastapi_backend/main.py @@ -14,8 +14,6 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger("spam_detection_logger") -xai_service = XAIService() - # ── Resolve model paths relative to this file ──────────────────────────────── # FIX: Use pathlib.Path so the app works regardless of the working directory. # Previously, hardcoded relative strings like "linear_svm_model.pkl" would @@ -31,6 +29,8 @@ vectorizer = joblib.load(BASE_DIR / "backend" / "tfidf_vectorizer.pkl") label_encoder = joblib.load(BASE_DIR / "label_encoder.pkl") +xai_service = XAIService(model=model, vectorizer=vectorizer, label_encoder=label_encoder) + app = FastAPI(title="Spam Detection System") # ── CORS setup ──────────────────────────────────────────────────────────────── @@ -121,16 +121,16 @@ def health(): # ── Routers ─────────────────────────────────────────────────────────────────── # EMAIL DATABASE ROUTES (Issue #13) -from backend.emails import router as emails_router -# from backend.database import init_db # Uncomment once DB is configured +from fastapi_backend.emails import router as emails_router +# from fastapi_backend.database import init_db # Uncomment once DB is configured # init_db() app.include_router(emails_router) # EXPORT ROUTES (Issue #23) -from backend.export import router as export_router +from fastapi_backend.export import router as export_router app.include_router(export_router) # ── Run directly ────────────────────────────────────────────────────────────── if __name__ == "__main__": import uvicorn - uvicorn.run("backend.main:app", host="0.0.0.0", port=PORT, reload=True) \ No newline at end of file + uvicorn.run("fastapi_backend.main:app", host="0.0.0.0", port=PORT, reload=True) \ No newline at end of file diff --git a/backend/middleware/logging_middleware.py b/fastapi_backend/middleware/logging_middleware.py similarity index 100% rename from backend/middleware/logging_middleware.py rename to fastapi_backend/middleware/logging_middleware.py diff --git a/fastapi_backend/requirements.txt b/fastapi_backend/requirements.txt new file mode 100644 index 0000000..461e098 --- /dev/null +++ b/fastapi_backend/requirements.txt @@ -0,0 +1,8 @@ +fastapi +uvicorn +mysql-connector-python +fpdf2 +scikit-learn==1.6.1 +joblib==1.5.1 +python-dotenv==1.1.1 +numpy diff --git a/backend/schema.sql b/fastapi_backend/schema.sql similarity index 100% rename from backend/schema.sql rename to fastapi_backend/schema.sql