Files / app /main.py
lea97338's picture
Upload 100 files (#1)
680fa2b
Raw
History Blame Contribute Delete
2.31 kB
import os
from fastapi import FastAPI, Depends, APIRouter
from fastapi.middleware.cors import CORSMiddleware
from sqlalchemy.orm import Session
from backend.app.core.config import settings
from backend.app.core.database import SessionLocal, engine, get_db
from backend.app.core.seeding import seed_db
from backend.app.models.base import Base
# Import Routers
from backend.app.routers import (
auth_router,
workers_router,
jobs_router,
bookings_router,
wallet_router,
roster_router,
admin_router
)
# Initialize database tables
# This is a safe fallback; in production migrations are preferred,
# but for the BCA viva, ensuring tables exist automatically is a lifesaver.
Base.metadata.create_all(bind=engine)
# Trigger Database Seeding on startup
db = SessionLocal()
try:
seed_db(db)
finally:
db.close()
app = FastAPI(
title=settings.PROJECT_NAME,
description="ConstructHire location-aware labor marketplace backend",
version="1.0.0",
docs_url="/docs",
redoc_url="/redoc"
)
# CORS configuration
# Allow local Vite dev server and production netlify deployments
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # For BCA viva simplicity; in strict prod specify origins
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Register API Routers
api_router = APIRouter(prefix="/api")
api_router.include_router(auth_router)
api_router.include_router(workers_router)
api_router.include_router(jobs_router)
api_router.include_router(bookings_router)
api_router.include_router(wallet_router)
api_router.include_router(roster_router)
api_router.include_router(admin_router)
app.include_router(api_router)
@app.get("/")
def read_root():
"""Root endpoint to check backend status."""
return {
"status": "online",
"service": settings.PROJECT_NAME,
"docs": "/docs",
"api_prefix": settings.API_V1_STR
}
@app.post("/api/admin/reset-db")
def reset_database(db: Session = Depends(get_db)):
"""Convenience endpoint to clear and re-seed the database with demo values."""
# Drop all tables and recreate them
Base.metadata.drop_all(bind=engine)
Base.metadata.create_all(bind=engine)
seed_db(db)
return {"message": "Database successfully reset and re-seeded."}