| import sys |
| import os |
| import json |
| import shutil |
| from datetime import datetime, timedelta |
|
|
| |
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
|
|
| from fastapi import FastAPI |
| from fastapi.middleware.cors import CORSMiddleware |
| from app.routers import analysis, company, health, tenders, documents, oc, tender_details, admin |
| from app.database import engine, Base, SessionLocal, SQLALCHEMY_DATABASE_URL |
| from app.models.tender import TenderModel |
| from app.models.analysis import AnalysisHistoryModel |
| from app.models.company import CompanyProfileModel |
| from app.models.oc import OCModel |
| from app.config import settings |
|
|
| |
| if SQLALCHEMY_DATABASE_URL.startswith("sqlite:////tmp/"): |
| src_db = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "andesops.db") |
| dest_db = "/tmp/andesops.db" |
| if os.path.exists(src_db) and not os.path.exists(dest_db): |
| print(f"!!! HF DETECTED: Copying initial database from {src_db} to {dest_db} !!!") |
| shutil.copy2(src_db, dest_db) |
|
|
| |
| try: |
| Base.metadata.create_all(bind=engine) |
| except Exception as e: |
| print(f"!!! Database creation error: {e} !!!") |
|
|
| app = FastAPI(title="AndesOps AI") |
|
|
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=["*"], |
| allow_credentials=True, |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
|
|
| |
| app.include_router(health.router, prefix="/api", tags=["Health"]) |
| app.include_router(tenders.router, prefix="/api", tags=["Tenders"]) |
| app.include_router(analysis.router, prefix="/api", tags=["Analysis"]) |
| app.include_router(company.router, prefix="/api", tags=["Company"]) |
| app.include_router(documents.router, prefix="/api", tags=["Documents"]) |
| app.include_router(oc.router, prefix="/api", tags=["Purchase Orders"]) |
| app.include_router(tender_details.router, prefix="/api", tags=["Tender Details"]) |
| app.include_router(admin.router, prefix="/api", tags=["Admin"]) |
|
|
| @app.on_event("startup") |
| async def startup_event(): |
| print("!!! BACKEND STARTING UP !!!") |
| db = SessionLocal() |
| try: |
| print(f"Checking database at: {settings.database_url}") |
| count = db.query(TenderModel).count() |
| print(f"Current tender count: {count}") |
| if count == 0: |
| print("Auto-seeding database...") |
| |
| if not db.query(CompanyProfileModel).first(): |
| print("Seeding Generic Company Profile...") |
| db.add(CompanyProfileModel( |
| name="My Company", |
| industry="Consulting", |
| services="General Services", |
| experience="1 year", |
| regions="Nacional", |
| documents_available="None" |
| )) |
| db.commit() |
| except Exception as e: |
| print(f"Seed error: {e}") |
| finally: |
| db.close() |
|
|
| @app.get("/") |
| def read_root(): |
| return {"message": "Welcome to AndesOps AI API"} |
|
|