Spaces:
Sleeping
Sleeping
| 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) | |
| def read_root(): | |
| """Root endpoint to check backend status.""" | |
| return { | |
| "status": "online", | |
| "service": settings.PROJECT_NAME, | |
| "docs": "/docs", | |
| "api_prefix": settings.API_V1_STR | |
| } | |
| 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."} | |